[INFO] fetching crate matchforge 0.1.0...
[INFO] testing matchforge-0.1.0 against master#1f7f8ea0721a3b1eb73e6c6d25cccb371434b320 for pr-154065-1
[INFO] extracting crate matchforge 0.1.0 into /workspace/builds/worker-5-tc1/source
[INFO] started tweaking crates.io crate matchforge 0.1.0
[INFO] removed 0 missing examples
[INFO] removed 0 missing tests
[INFO] finished tweaking crates.io crate matchforge 0.1.0
[INFO] tweaked toml for crates.io crate matchforge 0.1.0 written to /workspace/builds/worker-5-tc1/source/Cargo.toml
[INFO] validating manifest of crates.io crate matchforge 0.1.0 on toolchain 1f7f8ea0721a3b1eb73e6c6d25cccb371434b320
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate matchforge 0.1.0 already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 02179ffb202ca86dbe30909826f5150b7716fd348b5205058e08e36b8a28b320
[INFO] running `Command { std: "docker" "start" "-a" "02179ffb202ca86dbe30909826f5150b7716fd348b5205058e08e36b8a28b320", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "02179ffb202ca86dbe30909826f5150b7716fd348b5205058e08e36b8a28b320", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "02179ffb202ca86dbe30909826f5150b7716fd348b5205058e08e36b8a28b320", kill_on_drop: false }`
[INFO] [stdout] 02179ffb202ca86dbe30909826f5150b7716fd348b5205058e08e36b8a28b320
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 7263bf341be53e4deb35aef3ad53b7d2805ce2c69422a7d481e25474f04c2f96
[INFO] running `Command { std: "docker" "start" "-a" "7263bf341be53e4deb35aef3ad53b7d2805ce2c69422a7d481e25474f04c2f96", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.177
[INFO] [stderr]    Compiling syn v2.0.111
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]    Compiling bytes v1.11.0
[INFO] [stderr]    Compiling getrandom v0.2.16
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling signal-hook-registry v1.4.7
[INFO] [stderr]    Compiling mio v1.1.0
[INFO] [stderr]    Compiling socket2 v0.6.1
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling rand v0.8.5
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling tokio-macros v2.6.0
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]    Compiling tokio v1.48.0
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling uuid v1.18.1
[INFO] [stderr]    Compiling chrono v0.4.42
[INFO] [stderr]    Compiling matchforge v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `Instant`
[INFO] [stdout]  --> src/analytics/metrics.rs:9:27
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::time::{Duration, Instant};
[INFO] [stdout]   |                           ^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DateTime`
[INFO] [stdout]  --> src/persistence/redis.rs:4:14
[INFO] [stdout]   |
[INFO] [stdout] 4 | use chrono::{DateTime, Utc};
[INFO] [stdout]   |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/analytics/dashboard.rs:957:13
[INFO] [stdout]     |
[INFO] [stdout] 957 |         let mut headers = vec![
[INFO] [stdout]     |             ----^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player_id`
[INFO] [stdout]    --> src/analytics/metrics.rs:169:48
[INFO] [stdout]     |
[INFO] [stdout] 169 |     pub async fn record_player_activity(&self, player_id: Uuid, activity_type: PlayerActivityType) {
[INFO] [stdout]     |                                                ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_player_id`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `match_id`
[INFO] [stdout]    --> src/analytics/metrics.rs:599:43
[INFO] [stdout]     |
[INFO] [stdout] 599 |                 MetricEvent::MatchFound { match_id, quality } => {
[INFO] [stdout]     |                                           ^^^^^^^^ help: try ignoring the field: `match_id: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `quality`
[INFO] [stdout]    --> src/analytics/metrics.rs:599:53
[INFO] [stdout]     |
[INFO] [stdout] 599 |                 MetricEvent::MatchFound { match_id, quality } => {
[INFO] [stdout]     |                                                     ^^^^^^^ help: try ignoring the field: `quality: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player_id`
[INFO] [stdout]    --> src/analytics/metrics.rs:602:46
[INFO] [stdout]     |
[INFO] [stdout] 602 |                 MetricEvent::RatingUpdated { player_id, old_rating, new_rating } => {
[INFO] [stdout]     |                                              ^^^^^^^^^ help: try ignoring the field: `player_id: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `old_rating`
[INFO] [stdout]    --> src/analytics/metrics.rs:602:57
[INFO] [stdout]     |
[INFO] [stdout] 602 |                 MetricEvent::RatingUpdated { player_id, old_rating, new_rating } => {
[INFO] [stdout]     |                                                         ^^^^^^^^^^ help: try ignoring the field: `old_rating: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `new_rating`
[INFO] [stdout]    --> src/analytics/metrics.rs:602:69
[INFO] [stdout]     |
[INFO] [stdout] 602 |                 MetricEvent::RatingUpdated { player_id, old_rating, new_rating } => {
[INFO] [stdout]     |                                                                     ^^^^^^^^^^ help: try ignoring the field: `new_rating: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `party_id`
[INFO] [stdout]    --> src/analytics/metrics.rs:605:45
[INFO] [stdout]     |
[INFO] [stdout] 605 |                 MetricEvent::PartyCreated { party_id, size } => {
[INFO] [stdout]     |                                             ^^^^^^^^ help: try ignoring the field: `party_id: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `format`
[INFO] [stdout]    --> src/analytics/reports.rs:335:9
[INFO] [stdout]     |
[INFO] [stdout] 335 |         format: ReportFormat,
[INFO] [stdout]     |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_format`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `generation_time`
[INFO] [stdout]    --> src/analytics/reports.rs:361:13
[INFO] [stdout]     |
[INFO] [stdout] 361 |         let generation_time = start_time.elapsed();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_generation_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `date_range`
[INFO] [stdout]    --> src/analytics/reports.rs:382:49
[INFO] [stdout]     |
[INFO] [stdout] 382 |     async fn generate_performance_report(&self, date_range: &DateRange) -> Result<ReportData, ReportError> {
[INFO] [stdout]     |                                                 ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `date_range`
[INFO] [stdout]    --> src/analytics/reports.rs:456:54
[INFO] [stdout]     |
[INFO] [stdout] 456 |     async fn generate_player_analytics_report(&self, date_range: &DateRange) -> Result<ReportData, ReportError> {
[INFO] [stdout]     |                                                      ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `date_range`
[INFO] [stdout]    --> src/analytics/reports.rs:526:53
[INFO] [stdout]     |
[INFO] [stdout] 526 |     async fn generate_queue_analytics_report(&self, date_range: &DateRange) -> Result<ReportData, ReportError> {
[INFO] [stdout]     |                                                     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `date_range`
[INFO] [stdout]    --> src/analytics/reports.rs:573:54
[INFO] [stdout]     |
[INFO] [stdout] 573 |     async fn generate_rating_analytics_report(&self, date_range: &DateRange) -> Result<ReportData, ReportError> {
[INFO] [stdout]     |                                                      ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `date_range`
[INFO] [stdout]    --> src/analytics/reports.rs:620:53
[INFO] [stdout]     |
[INFO] [stdout] 620 |     async fn generate_party_analytics_report(&self, date_range: &DateRange) -> Result<ReportData, ReportError> {
[INFO] [stdout]     |                                                     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `date_range`
[INFO] [stdout]    --> src/analytics/reports.rs:667:51
[INFO] [stdout]     |
[INFO] [stdout] 667 |     async fn generate_system_health_report(&self, date_range: &DateRange) -> Result<ReportData, ReportError> {
[INFO] [stdout]     |                                                   ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `date_range`
[INFO] [stdout]    --> src/analytics/reports.rs:742:56
[INFO] [stdout]     |
[INFO] [stdout] 742 |     async fn generate_business_analytics_report(&self, date_range: &DateRange) -> Result<ReportData, ReportError> {
[INFO] [stdout]     |                                                        ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `date_range`
[INFO] [stdout]    --> src/analytics/reports.rs:812:44
[INFO] [stdout]     |
[INFO] [stdout] 812 |     async fn generate_custom_report(&self, date_range: &DateRange) -> Result<ReportData, ReportError> {
[INFO] [stdout]     |                                            ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rating_distribution`
[INFO] [stdout]    --> src/analytics/reports.rs:984:40
[INFO] [stdout]     |
[INFO] [stdout] 984 |     fn calculate_average_rating(&self, rating_distribution: &HashMap<String, u64>) -> f64 {
[INFO] [stdout]     |                                        ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_rating_distribution`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `snapshot`
[INFO] [stdout]    --> src/analytics/insights.rs:896:38
[INFO] [stdout]     |
[INFO] [stdout] 896 |     async fn detect_anomalies(&self, snapshot: &MetricsSnapshot) -> Result<Option<AnomalyResult>, InsightError> {
[INFO] [stdout]     |                                      ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_snapshot`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `time_range`
[INFO] [stdout]    --> src/analytics/dashboard.rs:603:38
[INFO] [stdout]     |
[INFO] [stdout] 603 |     async fn generate_widgets(&self, time_range: &TimeRange) -> Result<Vec<Widget>, DashboardError> {
[INFO] [stdout]     |                                      ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_time_range`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `connection_string`
[INFO] [stdout]    --> src/persistence/redis.rs:118:22
[INFO] [stdout]     |
[INFO] [stdout] 118 |     pub async fn new(connection_string: &str) -> Result<Self> {
[INFO] [stdout]     |                      ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_connection_string`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ip`
[INFO] [stdout]    --> src/security/security.rs:199:28
[INFO] [stdout]     |
[INFO] [stdout] 199 |         } else if let Some(ip) = &request.remote_addr {
[INFO] [stdout]     |                            ^^ help: if this is intentional, prefix it with an underscore: `_ip`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `hash`
[INFO] [stdout]    --> src/security/security.rs:201:17
[INFO] [stdout]     |
[INFO] [stdout] 201 |             let hash = std::collections::hash_map::DefaultHasher::new();
[INFO] [stdout]     |                 ^^^^ help: if this is intentional, prefix it with an underscore: `_hash`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `session_id`
[INFO] [stdout]    --> src/security/security.rs:236:32
[INFO] [stdout]     |
[INFO] [stdout] 236 |     fn validate_session(&self, session_id: &str) -> Result<Option<Uuid>, SecurityError> {
[INFO] [stdout]     |                                ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_session_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `matches_per_hour`, `rating_accuracy`, `solo_vs_party_win_rates`, and `daily_metrics` are never read
[INFO] [stdout]   --> src/analytics/metrics.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct AnalyticsMetrics {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 24 |     matches_per_hour: AtomicU64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     rating_accuracy: AtomicI64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     solo_vs_party_win_rates: Arc<RwLock<HashMap<String, f64>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     daily_metrics: Arc<RwLock<VecDeque<DailyMetrics>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `ml_models` is never read
[INFO] [stdout]   --> src/analytics/insights.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct InsightEngine {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 19 |     ml_models: Arc<RwLock<HashMap<InsightType, MLModel>>>,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `model_type`, `accuracy`, `last_trained`, and `training_data_size` are never read
[INFO] [stdout]    --> src/analytics/insights.rs:176:5
[INFO] [stdout]     |
[INFO] [stdout] 175 | struct MLModel {
[INFO] [stdout]     |        ------- fields in this struct
[INFO] [stdout] 176 |     model_type: ModelType,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 177 |     accuracy: f64,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 178 |     last_trained: DateTime<Utc>,
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 179 |     training_data_size: usize,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `MLModel` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `LinearRegression`, `TimeSeries`, `AnomalyDetection`, `Clustering`, and `Classification` are never constructed
[INFO] [stdout]    --> src/analytics/insights.rs:185:5
[INFO] [stdout]     |
[INFO] [stdout] 184 | enum ModelType {
[INFO] [stdout]     |      --------- variants in this enum
[INFO] [stdout] 185 |     LinearRegression,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 186 |     TimeSeries,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 187 |     AnomalyDetection,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 188 |     Clustering,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 189 |     Classification,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ModelType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `report_generator` is never read
[INFO] [stdout]   --> src/analytics/dashboard.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct DashboardData {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 16 |     analytics: Arc<AnalyticsMetrics>,
[INFO] [stdout] 17 |     report_generator: Arc<ReportGenerator>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `tau` is never read
[INFO] [stdout]   --> src/mmr/algorithm.rs:64:5
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub struct Glicko2Algorithm {
[INFO] [stdout]    |            ---------------- field in this struct
[INFO] [stdout] 64 |     tau: f64, // System volatility constant
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `calculate_match_quality` is never used
[INFO] [stdout]    --> src/queue/advanced_strategies.rs:136:8
[INFO] [stdout]     |
[INFO] [stdout]  21 | impl SwissMatcher {
[INFO] [stdout]     | ----------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 136 |     fn calculate_match_quality(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `constraints_satisfied` is never used
[INFO] [stdout]    --> src/queue/advanced_strategies.rs:416:8
[INFO] [stdout]     |
[INFO] [stdout] 355 | impl AdaptiveMatcher {
[INFO] [stdout]     | -------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 416 |     fn constraints_satisfied(&self, entry: &QueueEntry, constraints: &MatchConstraints) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `rate_limiter` is never read
[INFO] [stdout]   --> src/security/anti_abuse.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct AntiAbuseSystem {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] 17 |     config: AntiAbuseConfig,
[INFO] [stdout] 18 |     rate_limiter: RateLimiter,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `player_id`, `reports_received`, `reports_made`, `matches_abandoned`, and `suspicious_activities` are never read
[INFO] [stdout]    --> src/security/anti_abuse.rs:128:5
[INFO] [stdout]     |
[INFO] [stdout] 127 | struct PlayerBehavior {
[INFO] [stdout]     |        -------------- fields in this struct
[INFO] [stdout] 128 |     player_id: Uuid,
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     reports_received: Vec<DateTime<Utc>>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 133 |     reports_made: Vec<DateTime<Utc>>,
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 134 |     matches_abandoned: Vec<DateTime<Utc>>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 135 |     suspicious_activities: Vec<SuspiciousActivity>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `PlayerBehavior` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `event_type` is never read
[INFO] [stdout]    --> src/telemetry/events.rs:351:5
[INFO] [stdout]     |
[INFO] [stdout] 350 | pub struct EventBuilder {
[INFO] [stdout]     |            ------------ field in this struct
[INFO] [stdout] 351 |     event_type: EventType,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 |     async fn get<T>(&mut self, key: &str) -> Result<T>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout]    = note: `#[warn(async_fn_in_trait)]` on by default
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 19 -     async fn get<T>(&mut self, key: &str) -> Result<T>;
[INFO] [stdout] 19 +     fn get<T>(&mut self, key: &str) -> impl std::future::Future<Output = Result<T>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 |     async fn set(&mut self, key: &str, value: &str) -> Result<()>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 20 -     async fn set(&mut self, key: &str, value: &str) -> Result<()>;
[INFO] [stdout] 20 +     fn set(&mut self, key: &str, value: &str) -> impl std::future::Future<Output = Result<()>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 |     async fn set_ex(&mut self, key: &str, value: &str, seconds: usize) -> Result<()>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 21 -     async fn set_ex(&mut self, key: &str, value: &str, seconds: usize) -> Result<()>;
[INFO] [stdout] 21 +     fn set_ex(&mut self, key: &str, value: &str, seconds: usize) -> impl std::future::Future<Output = Result<()>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 |     async fn del(&mut self, key: &str) -> Result<()>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 22 -     async fn del(&mut self, key: &str) -> Result<()>;
[INFO] [stdout] 22 +     fn del(&mut self, key: &str) -> impl std::future::Future<Output = Result<()>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 |     async fn sadd(&mut self, key: &str, member: &str) -> Result<()>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 23 -     async fn sadd(&mut self, key: &str, member: &str) -> Result<()>;
[INFO] [stdout] 23 +     fn sadd(&mut self, key: &str, member: &str) -> impl std::future::Future<Output = Result<()>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     async fn srem(&mut self, key: &str, member: &str) -> Result<()>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 24 -     async fn srem(&mut self, key: &str, member: &str) -> Result<()>;
[INFO] [stdout] 24 +     fn srem(&mut self, key: &str, member: &str) -> impl std::future::Future<Output = Result<()>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     async fn smembers(&mut self, key: &str) -> Result<Vec<String>>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 25 -     async fn smembers(&mut self, key: &str) -> Result<Vec<String>>;
[INFO] [stdout] 25 +     fn smembers(&mut self, key: &str) -> impl std::future::Future<Output = Result<Vec<String>>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     async fn lpush(&mut self, key: &str, value: &str) -> Result<()>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 26 -     async fn lpush(&mut self, key: &str, value: &str) -> Result<()>;
[INFO] [stdout] 26 +     fn lpush(&mut self, key: &str, value: &str) -> impl std::future::Future<Output = Result<()>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     async fn ltrim(&mut self, key: &str, start: isize, stop: isize) -> Result<()>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 27 -     async fn ltrim(&mut self, key: &str, start: isize, stop: isize) -> Result<()>;
[INFO] [stdout] 27 +     fn ltrim(&mut self, key: &str, start: isize, stop: isize) -> impl std::future::Future<Output = Result<()>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     async fn zadd(&mut self, key: &str, score: f64, member: &str) -> Result<()>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 28 -     async fn zadd(&mut self, key: &str, score: f64, member: &str) -> Result<()>;
[INFO] [stdout] 28 +     fn zadd(&mut self, key: &str, score: f64, member: &str) -> impl std::future::Future<Output = Result<()>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     async fn zrem(&mut self, key: &str, member: &str) -> Result<()>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 29 -     async fn zrem(&mut self, key: &str, member: &str) -> Result<()>;
[INFO] [stdout] 29 +     fn zrem(&mut self, key: &str, member: &str) -> impl std::future::Future<Output = Result<()>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     async fn zrange(&mut self, key: &str, start: isize, stop: isize) -> Result<Vec<String>>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 30 -     async fn zrange(&mut self, key: &str, start: isize, stop: isize) -> Result<Vec<String>>;
[INFO] [stdout] 30 +     fn zrange(&mut self, key: &str, start: isize, stop: isize) -> impl std::future::Future<Output = Result<Vec<String>>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 |     async fn zrangebyscore(&mut self, key: &str, min: f64, max: f64) -> Result<Vec<String>>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 31 -     async fn zrangebyscore(&mut self, key: &str, min: f64, max: f64) -> Result<Vec<String>>;
[INFO] [stdout] 31 +     fn zrangebyscore(&mut self, key: &str, min: f64, max: f64) -> impl std::future::Future<Output = Result<Vec<String>>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     async fn keys(&mut self, pattern: &str) -> Result<Vec<String>>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 32 -     async fn keys(&mut self, pattern: &str) -> Result<Vec<String>>;
[INFO] [stdout] 32 +     fn keys(&mut self, pattern: &str) -> impl std::future::Future<Output = Result<Vec<String>>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     async fn zcard(&mut self, key: &str) -> Result<usize>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 33 -     async fn zcard(&mut self, key: &str) -> Result<usize>;
[INFO] [stdout] 33 +     fn zcard(&mut self, key: &str) -> impl std::future::Future<Output = Result<usize>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 |     async fn llen(&mut self, key: &str) -> Result<usize>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 34 -     async fn llen(&mut self, key: &str) -> Result<usize>;
[INFO] [stdout] 34 +     fn llen(&mut self, key: &str) -> impl std::future::Future<Output = Result<usize>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 |     async fn exists(&mut self, key: &str) -> Result<bool>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 35 -     async fn exists(&mut self, key: &str) -> Result<bool>;
[INFO] [stdout] 35 +     fn exists(&mut self, key: &str) -> impl std::future::Future<Output = Result<bool>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 36.51s
[INFO] running `Command { std: "docker" "inspect" "7263bf341be53e4deb35aef3ad53b7d2805ce2c69422a7d481e25474f04c2f96", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "7263bf341be53e4deb35aef3ad53b7d2805ce2c69422a7d481e25474f04c2f96", kill_on_drop: false }`
[INFO] [stdout] 7263bf341be53e4deb35aef3ad53b7d2805ce2c69422a7d481e25474f04c2f96
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 270feee00b3f493eae25916f537053a0716188748534b6bc76fb3a76d89637f7
[INFO] running `Command { std: "docker" "start" "-a" "270feee00b3f493eae25916f537053a0716188748534b6bc76fb3a76d89637f7", kill_on_drop: false }`
[INFO] [stderr]    Compiling zerocopy v0.8.31
[INFO] [stderr]    Compiling zerocopy-derive v0.8.31
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling futures-sink v0.3.31
[INFO] [stderr]    Compiling serde_json v1.0.145
[INFO] [stderr]    Compiling tokio v1.48.0
[INFO] [stderr]    Compiling futures-macro v0.3.31
[INFO] [stderr]    Compiling regex-syntax v0.8.8
[INFO] [stderr]    Compiling futures-channel v0.3.31
[INFO] [stderr]    Compiling futures-io v0.3.31
[INFO] [stderr]    Compiling clap_builder v4.5.53
[INFO] [stderr]    Compiling itertools v0.10.5
[INFO] [stderr]    Compiling futures-util v0.3.31
[INFO] [stderr]    Compiling async-stream-impl v0.3.6
[INFO] [stderr]    Compiling chrono v0.4.42
[INFO] [stderr]    Compiling regex-automata v0.4.13
[INFO] [stderr]    Compiling criterion-plot v0.5.0
[INFO] [stderr]    Compiling clap v4.5.53
[INFO] [stderr]    Compiling async-stream v0.3.6
[INFO] [stderr]    Compiling tinytemplate v1.2.1
[INFO] [stderr]    Compiling uuid v1.18.1
[INFO] [stderr]    Compiling is-terminal v0.4.17
[INFO] [stderr]    Compiling half v2.7.1
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling regex v1.12.2
[INFO] [stderr]    Compiling futures-executor v0.3.31
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling ciborium-ll v0.2.2
[INFO] [stderr]    Compiling futures v0.3.31
[INFO] [stderr]    Compiling rand v0.8.5
[INFO] [stderr]    Compiling ciborium v0.2.2
[INFO] [stderr]    Compiling criterion v0.5.1
[INFO] [stderr]    Compiling tokio-stream v0.1.17
[INFO] [stderr]    Compiling matchforge v0.1.0 (/opt/rustwide/workdir)
[INFO] [stderr]    Compiling tokio-test v0.4.4
[INFO] [stdout] warning: unused import: `Instant`
[INFO] [stdout]  --> src/analytics/metrics.rs:9:27
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::time::{Duration, Instant};
[INFO] [stdout]   |                           ^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DateTime`
[INFO] [stdout]  --> src/persistence/redis.rs:4:14
[INFO] [stdout]   |
[INFO] [stdout] 4 | use chrono::{DateTime, Utc};
[INFO] [stdout]   |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/analytics/dashboard.rs:957:13
[INFO] [stdout]     |
[INFO] [stdout] 957 |         let mut headers = vec![
[INFO] [stdout]     |             ----^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player_id`
[INFO] [stdout]    --> src/analytics/metrics.rs:169:48
[INFO] [stdout]     |
[INFO] [stdout] 169 |     pub async fn record_player_activity(&self, player_id: Uuid, activity_type: PlayerActivityType) {
[INFO] [stdout]     |                                                ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_player_id`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `match_id`
[INFO] [stdout]    --> src/analytics/metrics.rs:599:43
[INFO] [stdout]     |
[INFO] [stdout] 599 |                 MetricEvent::MatchFound { match_id, quality } => {
[INFO] [stdout]     |                                           ^^^^^^^^ help: try ignoring the field: `match_id: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `quality`
[INFO] [stdout]    --> src/analytics/metrics.rs:599:53
[INFO] [stdout]     |
[INFO] [stdout] 599 |                 MetricEvent::MatchFound { match_id, quality } => {
[INFO] [stdout]     |                                                     ^^^^^^^ help: try ignoring the field: `quality: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player_id`
[INFO] [stdout]    --> src/analytics/metrics.rs:602:46
[INFO] [stdout]     |
[INFO] [stdout] 602 |                 MetricEvent::RatingUpdated { player_id, old_rating, new_rating } => {
[INFO] [stdout]     |                                              ^^^^^^^^^ help: try ignoring the field: `player_id: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `old_rating`
[INFO] [stdout]    --> src/analytics/metrics.rs:602:57
[INFO] [stdout]     |
[INFO] [stdout] 602 |                 MetricEvent::RatingUpdated { player_id, old_rating, new_rating } => {
[INFO] [stdout]     |                                                         ^^^^^^^^^^ help: try ignoring the field: `old_rating: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `new_rating`
[INFO] [stdout]    --> src/analytics/metrics.rs:602:69
[INFO] [stdout]     |
[INFO] [stdout] 602 |                 MetricEvent::RatingUpdated { player_id, old_rating, new_rating } => {
[INFO] [stdout]     |                                                                     ^^^^^^^^^^ help: try ignoring the field: `new_rating: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `party_id`
[INFO] [stdout]    --> src/analytics/metrics.rs:605:45
[INFO] [stdout]     |
[INFO] [stdout] 605 |                 MetricEvent::PartyCreated { party_id, size } => {
[INFO] [stdout]     |                                             ^^^^^^^^ help: try ignoring the field: `party_id: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `format`
[INFO] [stdout]    --> src/analytics/reports.rs:335:9
[INFO] [stdout]     |
[INFO] [stdout] 335 |         format: ReportFormat,
[INFO] [stdout]     |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_format`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `generation_time`
[INFO] [stdout]    --> src/analytics/reports.rs:361:13
[INFO] [stdout]     |
[INFO] [stdout] 361 |         let generation_time = start_time.elapsed();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_generation_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `date_range`
[INFO] [stdout]    --> src/analytics/reports.rs:382:49
[INFO] [stdout]     |
[INFO] [stdout] 382 |     async fn generate_performance_report(&self, date_range: &DateRange) -> Result<ReportData, ReportError> {
[INFO] [stdout]     |                                                 ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `date_range`
[INFO] [stdout]    --> src/analytics/reports.rs:456:54
[INFO] [stdout]     |
[INFO] [stdout] 456 |     async fn generate_player_analytics_report(&self, date_range: &DateRange) -> Result<ReportData, ReportError> {
[INFO] [stdout]     |                                                      ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `date_range`
[INFO] [stdout]    --> src/analytics/reports.rs:526:53
[INFO] [stdout]     |
[INFO] [stdout] 526 |     async fn generate_queue_analytics_report(&self, date_range: &DateRange) -> Result<ReportData, ReportError> {
[INFO] [stdout]     |                                                     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `date_range`
[INFO] [stdout]    --> src/analytics/reports.rs:573:54
[INFO] [stdout]     |
[INFO] [stdout] 573 |     async fn generate_rating_analytics_report(&self, date_range: &DateRange) -> Result<ReportData, ReportError> {
[INFO] [stdout]     |                                                      ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `date_range`
[INFO] [stdout]    --> src/analytics/reports.rs:620:53
[INFO] [stdout]     |
[INFO] [stdout] 620 |     async fn generate_party_analytics_report(&self, date_range: &DateRange) -> Result<ReportData, ReportError> {
[INFO] [stdout]     |                                                     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `date_range`
[INFO] [stdout]    --> src/analytics/reports.rs:667:51
[INFO] [stdout]     |
[INFO] [stdout] 667 |     async fn generate_system_health_report(&self, date_range: &DateRange) -> Result<ReportData, ReportError> {
[INFO] [stdout]     |                                                   ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `date_range`
[INFO] [stdout]    --> src/analytics/reports.rs:742:56
[INFO] [stdout]     |
[INFO] [stdout] 742 |     async fn generate_business_analytics_report(&self, date_range: &DateRange) -> Result<ReportData, ReportError> {
[INFO] [stdout]     |                                                        ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `date_range`
[INFO] [stdout]    --> src/analytics/reports.rs:812:44
[INFO] [stdout]     |
[INFO] [stdout] 812 |     async fn generate_custom_report(&self, date_range: &DateRange) -> Result<ReportData, ReportError> {
[INFO] [stdout]     |                                            ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rating_distribution`
[INFO] [stdout]    --> src/analytics/reports.rs:984:40
[INFO] [stdout]     |
[INFO] [stdout] 984 |     fn calculate_average_rating(&self, rating_distribution: &HashMap<String, u64>) -> f64 {
[INFO] [stdout]     |                                        ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_rating_distribution`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `snapshot`
[INFO] [stdout]    --> src/analytics/insights.rs:896:38
[INFO] [stdout]     |
[INFO] [stdout] 896 |     async fn detect_anomalies(&self, snapshot: &MetricsSnapshot) -> Result<Option<AnomalyResult>, InsightError> {
[INFO] [stdout]     |                                      ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_snapshot`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Instant`
[INFO] [stdout]  --> src/analytics/metrics.rs:9:27
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::time::{Duration, Instant};
[INFO] [stdout]   |                           ^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DateTime`
[INFO] [stdout]  --> src/persistence/redis.rs:4:14
[INFO] [stdout]   |
[INFO] [stdout] 4 | use chrono::{DateTime, Utc};
[INFO] [stdout]   |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `time_range`
[INFO] [stdout]    --> src/analytics/dashboard.rs:603:38
[INFO] [stdout]     |
[INFO] [stdout] 603 |     async fn generate_widgets(&self, time_range: &TimeRange) -> Result<Vec<Widget>, DashboardError> {
[INFO] [stdout]     |                                      ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_time_range`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `connection_string`
[INFO] [stdout]    --> src/persistence/redis.rs:118:22
[INFO] [stdout]     |
[INFO] [stdout] 118 |     pub async fn new(connection_string: &str) -> Result<Self> {
[INFO] [stdout]     |                      ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_connection_string`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/analytics/dashboard.rs:957:13
[INFO] [stdout]     |
[INFO] [stdout] 957 |         let mut headers = vec![
[INFO] [stdout]     |             ----^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ip`
[INFO] [stdout]    --> src/security/security.rs:199:28
[INFO] [stdout]     |
[INFO] [stdout] 199 |         } else if let Some(ip) = &request.remote_addr {
[INFO] [stdout]     |                            ^^ help: if this is intentional, prefix it with an underscore: `_ip`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `hash`
[INFO] [stdout]    --> src/security/security.rs:201:17
[INFO] [stdout]     |
[INFO] [stdout] 201 |             let hash = std::collections::hash_map::DefaultHasher::new();
[INFO] [stdout]     |                 ^^^^ help: if this is intentional, prefix it with an underscore: `_hash`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `session_id`
[INFO] [stdout]    --> src/security/security.rs:236:32
[INFO] [stdout]     |
[INFO] [stdout] 236 |     fn validate_session(&self, session_id: &str) -> Result<Option<Uuid>, SecurityError> {
[INFO] [stdout]     |                                ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_session_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `matches_per_hour`, `rating_accuracy`, `solo_vs_party_win_rates`, and `daily_metrics` are never read
[INFO] [stdout]   --> src/analytics/metrics.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct AnalyticsMetrics {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 24 |     matches_per_hour: AtomicU64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     rating_accuracy: AtomicI64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     solo_vs_party_win_rates: Arc<RwLock<HashMap<String, f64>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     daily_metrics: Arc<RwLock<VecDeque<DailyMetrics>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `ml_models` is never read
[INFO] [stdout]   --> src/analytics/insights.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct InsightEngine {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 19 |     ml_models: Arc<RwLock<HashMap<InsightType, MLModel>>>,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `model_type`, `accuracy`, `last_trained`, and `training_data_size` are never read
[INFO] [stdout]    --> src/analytics/insights.rs:176:5
[INFO] [stdout]     |
[INFO] [stdout] 175 | struct MLModel {
[INFO] [stdout]     |        ------- fields in this struct
[INFO] [stdout] 176 |     model_type: ModelType,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 177 |     accuracy: f64,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 178 |     last_trained: DateTime<Utc>,
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 179 |     training_data_size: usize,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `MLModel` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `LinearRegression`, `TimeSeries`, `AnomalyDetection`, `Clustering`, and `Classification` are never constructed
[INFO] [stdout]    --> src/analytics/insights.rs:185:5
[INFO] [stdout]     |
[INFO] [stdout] 184 | enum ModelType {
[INFO] [stdout]     |      --------- variants in this enum
[INFO] [stdout] 185 |     LinearRegression,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 186 |     TimeSeries,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 187 |     AnomalyDetection,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 188 |     Clustering,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 189 |     Classification,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ModelType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `report_generator` is never read
[INFO] [stdout]   --> src/analytics/dashboard.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct DashboardData {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 16 |     analytics: Arc<AnalyticsMetrics>,
[INFO] [stdout] 17 |     report_generator: Arc<ReportGenerator>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `tau` is never read
[INFO] [stdout]   --> src/mmr/algorithm.rs:64:5
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub struct Glicko2Algorithm {
[INFO] [stdout]    |            ---------------- field in this struct
[INFO] [stdout] 64 |     tau: f64, // System volatility constant
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `calculate_match_quality` is never used
[INFO] [stdout]    --> src/queue/advanced_strategies.rs:136:8
[INFO] [stdout]     |
[INFO] [stdout]  21 | impl SwissMatcher {
[INFO] [stdout]     | ----------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 136 |     fn calculate_match_quality(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `constraints_satisfied` is never used
[INFO] [stdout]    --> src/queue/advanced_strategies.rs:416:8
[INFO] [stdout]     |
[INFO] [stdout] 355 | impl AdaptiveMatcher {
[INFO] [stdout]     | -------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 416 |     fn constraints_satisfied(&self, entry: &QueueEntry, constraints: &MatchConstraints) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `rate_limiter` is never read
[INFO] [stdout]   --> src/security/anti_abuse.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct AntiAbuseSystem {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] 17 |     config: AntiAbuseConfig,
[INFO] [stdout] 18 |     rate_limiter: RateLimiter,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `player_id`, `reports_received`, `reports_made`, `matches_abandoned`, and `suspicious_activities` are never read
[INFO] [stdout]    --> src/security/anti_abuse.rs:128:5
[INFO] [stdout]     |
[INFO] [stdout] 127 | struct PlayerBehavior {
[INFO] [stdout]     |        -------------- fields in this struct
[INFO] [stdout] 128 |     player_id: Uuid,
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     reports_received: Vec<DateTime<Utc>>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 133 |     reports_made: Vec<DateTime<Utc>>,
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 134 |     matches_abandoned: Vec<DateTime<Utc>>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 135 |     suspicious_activities: Vec<SuspiciousActivity>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `PlayerBehavior` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `event_type` is never read
[INFO] [stdout]    --> src/telemetry/events.rs:351:5
[INFO] [stdout]     |
[INFO] [stdout] 350 | pub struct EventBuilder {
[INFO] [stdout]     |            ------------ field in this struct
[INFO] [stdout] 351 |     event_type: EventType,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 |     async fn get<T>(&mut self, key: &str) -> Result<T>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout]    = note: `#[warn(async_fn_in_trait)]` on by default
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 19 -     async fn get<T>(&mut self, key: &str) -> Result<T>;
[INFO] [stdout] 19 +     fn get<T>(&mut self, key: &str) -> impl std::future::Future<Output = Result<T>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 |     async fn set(&mut self, key: &str, value: &str) -> Result<()>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 20 -     async fn set(&mut self, key: &str, value: &str) -> Result<()>;
[INFO] [stdout] 20 +     fn set(&mut self, key: &str, value: &str) -> impl std::future::Future<Output = Result<()>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 |     async fn set_ex(&mut self, key: &str, value: &str, seconds: usize) -> Result<()>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 21 -     async fn set_ex(&mut self, key: &str, value: &str, seconds: usize) -> Result<()>;
[INFO] [stdout] 21 +     fn set_ex(&mut self, key: &str, value: &str, seconds: usize) -> impl std::future::Future<Output = Result<()>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 |     async fn del(&mut self, key: &str) -> Result<()>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 22 -     async fn del(&mut self, key: &str) -> Result<()>;
[INFO] [stdout] 22 +     fn del(&mut self, key: &str) -> impl std::future::Future<Output = Result<()>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 |     async fn sadd(&mut self, key: &str, member: &str) -> Result<()>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 23 -     async fn sadd(&mut self, key: &str, member: &str) -> Result<()>;
[INFO] [stdout] 23 +     fn sadd(&mut self, key: &str, member: &str) -> impl std::future::Future<Output = Result<()>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     async fn srem(&mut self, key: &str, member: &str) -> Result<()>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 24 -     async fn srem(&mut self, key: &str, member: &str) -> Result<()>;
[INFO] [stdout] 24 +     fn srem(&mut self, key: &str, member: &str) -> impl std::future::Future<Output = Result<()>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     async fn smembers(&mut self, key: &str) -> Result<Vec<String>>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 25 -     async fn smembers(&mut self, key: &str) -> Result<Vec<String>>;
[INFO] [stdout] 25 +     fn smembers(&mut self, key: &str) -> impl std::future::Future<Output = Result<Vec<String>>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     async fn lpush(&mut self, key: &str, value: &str) -> Result<()>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 26 -     async fn lpush(&mut self, key: &str, value: &str) -> Result<()>;
[INFO] [stdout] 26 +     fn lpush(&mut self, key: &str, value: &str) -> impl std::future::Future<Output = Result<()>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     async fn ltrim(&mut self, key: &str, start: isize, stop: isize) -> Result<()>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 27 -     async fn ltrim(&mut self, key: &str, start: isize, stop: isize) -> Result<()>;
[INFO] [stdout] 27 +     fn ltrim(&mut self, key: &str, start: isize, stop: isize) -> impl std::future::Future<Output = Result<()>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     async fn zadd(&mut self, key: &str, score: f64, member: &str) -> Result<()>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 28 -     async fn zadd(&mut self, key: &str, score: f64, member: &str) -> Result<()>;
[INFO] [stdout] 28 +     fn zadd(&mut self, key: &str, score: f64, member: &str) -> impl std::future::Future<Output = Result<()>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     async fn zrem(&mut self, key: &str, member: &str) -> Result<()>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 29 -     async fn zrem(&mut self, key: &str, member: &str) -> Result<()>;
[INFO] [stdout] 29 +     fn zrem(&mut self, key: &str, member: &str) -> impl std::future::Future<Output = Result<()>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     async fn zrange(&mut self, key: &str, start: isize, stop: isize) -> Result<Vec<String>>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 30 -     async fn zrange(&mut self, key: &str, start: isize, stop: isize) -> Result<Vec<String>>;
[INFO] [stdout] 30 +     fn zrange(&mut self, key: &str, start: isize, stop: isize) -> impl std::future::Future<Output = Result<Vec<String>>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 |     async fn zrangebyscore(&mut self, key: &str, min: f64, max: f64) -> Result<Vec<String>>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 31 -     async fn zrangebyscore(&mut self, key: &str, min: f64, max: f64) -> Result<Vec<String>>;
[INFO] [stdout] 31 +     fn zrangebyscore(&mut self, key: &str, min: f64, max: f64) -> impl std::future::Future<Output = Result<Vec<String>>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     async fn keys(&mut self, pattern: &str) -> Result<Vec<String>>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 32 -     async fn keys(&mut self, pattern: &str) -> Result<Vec<String>>;
[INFO] [stdout] 32 +     fn keys(&mut self, pattern: &str) -> impl std::future::Future<Output = Result<Vec<String>>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     async fn zcard(&mut self, key: &str) -> Result<usize>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 33 -     async fn zcard(&mut self, key: &str) -> Result<usize>;
[INFO] [stdout] 33 +     fn zcard(&mut self, key: &str) -> impl std::future::Future<Output = Result<usize>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 |     async fn llen(&mut self, key: &str) -> Result<usize>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 34 -     async fn llen(&mut self, key: &str) -> Result<usize>;
[INFO] [stdout] 34 +     fn llen(&mut self, key: &str) -> impl std::future::Future<Output = Result<usize>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 |     async fn exists(&mut self, key: &str) -> Result<bool>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 35 -     async fn exists(&mut self, key: &str) -> Result<bool>;
[INFO] [stdout] 35 +     fn exists(&mut self, key: &str) -> impl std::future::Future<Output = Result<bool>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player_id`
[INFO] [stdout]    --> src/analytics/metrics.rs:169:48
[INFO] [stdout]     |
[INFO] [stdout] 169 |     pub async fn record_player_activity(&self, player_id: Uuid, activity_type: PlayerActivityType) {
[INFO] [stdout]     |                                                ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_player_id`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `match_id`
[INFO] [stdout]    --> src/analytics/metrics.rs:599:43
[INFO] [stdout]     |
[INFO] [stdout] 599 |                 MetricEvent::MatchFound { match_id, quality } => {
[INFO] [stdout]     |                                           ^^^^^^^^ help: try ignoring the field: `match_id: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `quality`
[INFO] [stdout]    --> src/analytics/metrics.rs:599:53
[INFO] [stdout]     |
[INFO] [stdout] 599 |                 MetricEvent::MatchFound { match_id, quality } => {
[INFO] [stdout]     |                                                     ^^^^^^^ help: try ignoring the field: `quality: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player_id`
[INFO] [stdout]    --> src/analytics/metrics.rs:602:46
[INFO] [stdout]     |
[INFO] [stdout] 602 |                 MetricEvent::RatingUpdated { player_id, old_rating, new_rating } => {
[INFO] [stdout]     |                                              ^^^^^^^^^ help: try ignoring the field: `player_id: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `old_rating`
[INFO] [stdout]    --> src/analytics/metrics.rs:602:57
[INFO] [stdout]     |
[INFO] [stdout] 602 |                 MetricEvent::RatingUpdated { player_id, old_rating, new_rating } => {
[INFO] [stdout]     |                                                         ^^^^^^^^^^ help: try ignoring the field: `old_rating: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `new_rating`
[INFO] [stdout]    --> src/analytics/metrics.rs:602:69
[INFO] [stdout]     |
[INFO] [stdout] 602 |                 MetricEvent::RatingUpdated { player_id, old_rating, new_rating } => {
[INFO] [stdout]     |                                                                     ^^^^^^^^^^ help: try ignoring the field: `new_rating: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `party_id`
[INFO] [stdout]    --> src/analytics/metrics.rs:605:45
[INFO] [stdout]     |
[INFO] [stdout] 605 |                 MetricEvent::PartyCreated { party_id, size } => {
[INFO] [stdout]     |                                             ^^^^^^^^ help: try ignoring the field: `party_id: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `format`
[INFO] [stdout]    --> src/analytics/reports.rs:335:9
[INFO] [stdout]     |
[INFO] [stdout] 335 |         format: ReportFormat,
[INFO] [stdout]     |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_format`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `generation_time`
[INFO] [stdout]    --> src/analytics/reports.rs:361:13
[INFO] [stdout]     |
[INFO] [stdout] 361 |         let generation_time = start_time.elapsed();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_generation_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `date_range`
[INFO] [stdout]    --> src/analytics/reports.rs:382:49
[INFO] [stdout]     |
[INFO] [stdout] 382 |     async fn generate_performance_report(&self, date_range: &DateRange) -> Result<ReportData, ReportError> {
[INFO] [stdout]     |                                                 ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `date_range`
[INFO] [stdout]    --> src/analytics/reports.rs:456:54
[INFO] [stdout]     |
[INFO] [stdout] 456 |     async fn generate_player_analytics_report(&self, date_range: &DateRange) -> Result<ReportData, ReportError> {
[INFO] [stdout]     |                                                      ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `date_range`
[INFO] [stdout]    --> src/analytics/reports.rs:526:53
[INFO] [stdout]     |
[INFO] [stdout] 526 |     async fn generate_queue_analytics_report(&self, date_range: &DateRange) -> Result<ReportData, ReportError> {
[INFO] [stdout]     |                                                     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `date_range`
[INFO] [stdout]    --> src/analytics/reports.rs:573:54
[INFO] [stdout]     |
[INFO] [stdout] 573 |     async fn generate_rating_analytics_report(&self, date_range: &DateRange) -> Result<ReportData, ReportError> {
[INFO] [stdout]     |                                                      ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `date_range`
[INFO] [stdout]    --> src/analytics/reports.rs:620:53
[INFO] [stdout]     |
[INFO] [stdout] 620 |     async fn generate_party_analytics_report(&self, date_range: &DateRange) -> Result<ReportData, ReportError> {
[INFO] [stdout]     |                                                     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `date_range`
[INFO] [stdout]    --> src/analytics/reports.rs:667:51
[INFO] [stdout]     |
[INFO] [stdout] 667 |     async fn generate_system_health_report(&self, date_range: &DateRange) -> Result<ReportData, ReportError> {
[INFO] [stdout]     |                                                   ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `date_range`
[INFO] [stdout]    --> src/analytics/reports.rs:742:56
[INFO] [stdout]     |
[INFO] [stdout] 742 |     async fn generate_business_analytics_report(&self, date_range: &DateRange) -> Result<ReportData, ReportError> {
[INFO] [stdout]     |                                                        ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `date_range`
[INFO] [stdout]    --> src/analytics/reports.rs:812:44
[INFO] [stdout]     |
[INFO] [stdout] 812 |     async fn generate_custom_report(&self, date_range: &DateRange) -> Result<ReportData, ReportError> {
[INFO] [stdout]     |                                            ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rating_distribution`
[INFO] [stdout]    --> src/analytics/reports.rs:984:40
[INFO] [stdout]     |
[INFO] [stdout] 984 |     fn calculate_average_rating(&self, rating_distribution: &HashMap<String, u64>) -> f64 {
[INFO] [stdout]     |                                        ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_rating_distribution`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `snapshot`
[INFO] [stdout]    --> src/analytics/insights.rs:896:38
[INFO] [stdout]     |
[INFO] [stdout] 896 |     async fn detect_anomalies(&self, snapshot: &MetricsSnapshot) -> Result<Option<AnomalyResult>, InsightError> {
[INFO] [stdout]     |                                      ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_snapshot`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `AnalyticsConfig` in this scope
[INFO] [stdout]   --> examples/simple_test.rs:33:18
[INFO] [stdout]    |
[INFO] [stdout] 33 |     let config = AnalyticsConfig::default();
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^ use of undeclared type `AnalyticsConfig`
[INFO] [stdout]    |
[INFO] [stdout] help: consider importing this struct
[INFO] [stdout]    |
[INFO] [stdout]  3 + use matchforge::analytics::metrics::AnalyticsConfig;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0422]: cannot find struct, variant or union type `AntiAbuseConfig` in this scope
[INFO] [stdout]    --> examples/simple_test.rs:176:29
[INFO] [stdout]     |
[INFO] [stdout] 176 |     let anti_abuse_config = AntiAbuseConfig {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^ not found in this scope
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this struct
[INFO] [stdout]     |
[INFO] [stdout]   3 + use matchforge::security::anti_abuse::AntiAbuseConfig;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0422]: cannot find struct, variant or union type `RunnerConfig` in this scope
[INFO] [stdout]    --> tests/integration_tests.rs:203:25
[INFO] [stdout]     |
[INFO] [stdout] 203 |     let runner_config = RunnerConfig {
[INFO] [stdout]     |                         ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/queue/manager.rs:13:1
[INFO] [stdout]     |
[INFO] [stdout]  13 | pub struct QueueConfig {
[INFO] [stdout]     | ---------------------- similarly named struct `QueueConfig` defined here
[INFO] [stdout]     |
[INFO] [stdout] help: a struct with a similar name exists
[INFO] [stdout]     |
[INFO] [stdout] 203 -     let runner_config = RunnerConfig {
[INFO] [stdout] 203 +     let runner_config = QueueConfig {
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this struct
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::RunnerConfig;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0422]: cannot find struct, variant or union type `QueueRunnerConfig` in this scope
[INFO] [stdout]    --> tests/integration_tests.rs:209:54
[INFO] [stdout]     |
[INFO] [stdout] 209 |             configs.insert("test_queue".to_string(), QueueRunnerConfig {
[INFO] [stdout]     |                                                      ^^^^^^^^^^^^^^^^^ not found in this scope
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this struct
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::runner::QueueRunnerConfig;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0422]: cannot find struct, variant or union type `Team` in this scope
[INFO] [stdout]    --> tests/integration_tests.rs:302:13
[INFO] [stdout]     |
[INFO] [stdout] 302 |             Team {
[INFO] [stdout]     |             ^^^^ not found in this scope
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this struct
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::lobby::Team;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0422]: cannot find struct, variant or union type `Team` in this scope
[INFO] [stdout]    --> tests/integration_tests.rs:306:13
[INFO] [stdout]     |
[INFO] [stdout] 306 |             Team {
[INFO] [stdout]     |             ^^^^ not found in this scope
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this struct
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::lobby::Team;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `entry`
[INFO] [stdout]   --> examples/basic.rs:45:13
[INFO] [stdout]    |
[INFO] [stdout] 45 |         let entry = queue_manager.join_queue_solo(
[INFO] [stdout]    |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_entry`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `clone` found for struct `matchforge::MatchmakingRunner` in the current scope
[INFO] [stdout]    --> tests/integration_tests.rs:222:29
[INFO] [stdout]     |
[INFO] [stdout] 222 |         let runner = runner.clone();
[INFO] [stdout]     |                             ^^^^^ method not found in `matchforge::MatchmakingRunner`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `party1_entry`
[INFO] [stdout]   --> examples/party_matchmaking.rs:80:9
[INFO] [stdout]    |
[INFO] [stdout] 80 |     let party1_entry = queue_manager.join_queue_party(
[INFO] [stdout]    |         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_party1_entry`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `party2_entry`
[INFO] [stdout]   --> examples/party_matchmaking.rs:97:9
[INFO] [stdout]    |
[INFO] [stdout] 97 |     let party2_entry = queue_manager.join_queue_party(
[INFO] [stdout]    |         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_party2_entry`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the `?` operator can only be used on `Result`s, not `Option`s, in an async function that returns `Result`
[INFO] [stdout]    --> examples/simple_test.rs:147:69
[INFO] [stdout]     |
[INFO] [stdout] 124 |   async fn test_party_system() -> Result<()> {
[INFO] [stdout]     |  ____________________________________________-
[INFO] [stdout] 125 | |     println!("\n👥 Testing Party System...");
[INFO] [stdout] 126 | |     
[INFO] [stdout] 127 | |     let persistence = Arc::new(InMemoryAdapter::new());
[INFO] [stdout] ...   |
[INFO] [stdout] 147 | |     let updated_party = party_manager.get_player_party(leader).await?;
[INFO] [stdout]     | |                                                                     ^ use `.ok_or(...)?` to provide an error compatible with `std::result::Result<(), MatchForgeError>`
[INFO] [stdout] ...   |
[INFO] [stdout] 151 | |     Ok(())
[INFO] [stdout] 152 | | }
[INFO] [stdout]     | |_- this function returns a `Result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0560]: struct `matchforge::security::RateLimitConfig` has no field named `window_seconds`
[INFO] [stdout]    --> examples/simple_test.rs:160:9
[INFO] [stdout]     |
[INFO] [stdout] 160 |         window_seconds: 60,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^ `matchforge::security::RateLimitConfig` does not have this field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available fields are: `window`, `penalty_multiplier`, `max_penalty_duration`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0560]: struct `matchforge::security::RateLimitConfig` has no field named `burst_size`
[INFO] [stdout]    --> examples/simple_test.rs:161:9
[INFO] [stdout]     |
[INFO] [stdout] 161 |         burst_size: 5,
[INFO] [stdout]     |         ^^^^^^^^^^ `matchforge::security::RateLimitConfig` does not have this field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available fields are: `window`, `penalty_multiplier`, `max_penalty_duration`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `party_manager`
[INFO] [stdout]   --> tests/integration_tests.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 16 |     let party_manager = Arc::new(PartyManager::new(
[INFO] [stdout]    |         ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_party_manager`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> examples/simple_test.rs:170:52
[INFO] [stdout]     |
[INFO] [stdout] 170 |         let result = rate_limiter.check_rate_limit(&client_ip).await?;
[INFO] [stdout]     |                                   ---------------- ^^^^^^^^^^ expected `Uuid`, found `&String`
[INFO] [stdout]     |                                   |
[INFO] [stdout]     |                                   arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/security/rate_limiter.rs:64:18
[INFO] [stdout]     |
[INFO] [stdout]  64 |     pub async fn check_rate_limit(&self, client_id: Uuid) -> RateLimitResult {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the `?` operator can only be applied to values that implement `Try`
[INFO] [stdout]    --> examples/simple_test.rs:170:22
[INFO] [stdout]     |
[INFO] [stdout] 170 |         let result = rate_limiter.check_rate_limit(&client_ip).await?;
[INFO] [stdout]     |                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the `?` operator cannot be applied to type `RateLimitResult`
[INFO] [stdout]     |
[INFO] [stdout]     = help: the nightly-only, unstable trait `Try` is not implemented for `RateLimitResult`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player_id`
[INFO] [stdout]    --> tests/integration_tests.rs:269:9
[INFO] [stdout]     |
[INFO] [stdout] 269 |     let player_id = Uuid::new_v4();
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_player_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `record_activity` found for struct `Arc<matchforge::AntiAbuseSystem>` in the current scope
[INFO] [stdout]    --> examples/simple_test.rs:188:33
[INFO] [stdout]     |
[INFO] [stdout] 188 |         let result = anti_abuse.record_activity(player_id, "normal_activity").await?;
[INFO] [stdout]     |                                 ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: there is a method `track_activity` with a similar name
[INFO] [stdout]     |
[INFO] [stdout] 188 -         let result = anti_abuse.record_activity(player_id, "normal_activity").await?;
[INFO] [stdout] 188 +         let result = anti_abuse.track_activity(player_id, "normal_activity").await?;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0422, E0599.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0422`.
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0277, E0308, E0422, E0433, E0560, E0599.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0277`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `matchforge` (test "integration_tests") due to 5 previous errors; 2 warnings emitted
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stderr] error: could not compile `matchforge` (example "simple_test") due to 8 previous errors
[INFO] [stdout] error[E0433]: cannot find type `AnalyticsConfig` in this scope
[INFO] [stdout]   --> examples/analytics_dashboard.rs:22:52
[INFO] [stdout]    |
[INFO] [stdout] 22 |     let analytics = Arc::new(AnalyticsMetrics::new(AnalyticsConfig::default()));
[INFO] [stdout]    |                                                    ^^^^^^^^^^^^^^^ use of undeclared type `AnalyticsConfig`
[INFO] [stdout]    |
[INFO] [stdout] help: consider importing this struct
[INFO] [stdout]    |
[INFO] [stdout]  6 + use matchforge::analytics::metrics::AnalyticsConfig;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0422]: cannot find struct, variant or union type `RoleRequirement` in this scope
[INFO] [stdout]   --> examples/analytics_dashboard.rs:58:21
[INFO] [stdout]    |
[INFO] [stdout] 58 |                     RoleRequirement { role: "tank".to_string(), required: true },
[INFO] [stdout]    |                     ^^^^^^^^^^^^^^^ not found in this scope
[INFO] [stdout]    |
[INFO] [stdout] help: consider importing this struct
[INFO] [stdout]    |
[INFO] [stdout]  6 + use matchforge::queue::RoleRequirement;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0422]: cannot find struct, variant or union type `RoleRequirement` in this scope
[INFO] [stdout]   --> examples/analytics_dashboard.rs:59:21
[INFO] [stdout]    |
[INFO] [stdout] 59 |                     RoleRequirement { role: "healer".to_string(), required: true },
[INFO] [stdout]    |                     ^^^^^^^^^^^^^^^ not found in this scope
[INFO] [stdout]    |
[INFO] [stdout] help: consider importing this struct
[INFO] [stdout]    |
[INFO] [stdout]  6 + use matchforge::queue::RoleRequirement;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `ReportType` in this scope
[INFO] [stdout]    --> examples/analytics_dashboard.rs:100:9
[INFO] [stdout]     |
[INFO] [stdout] 100 |         ReportType::Performance,
[INFO] [stdout]     |         ^^^^^^^^^^ use of undeclared type `ReportType`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::ReportType;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `ReportFormat` in this scope
[INFO] [stdout]    --> examples/analytics_dashboard.rs:102:9
[INFO] [stdout]     |
[INFO] [stdout] 102 |         ReportFormat::Json,
[INFO] [stdout]     |         ^^^^^^^^^^^^ use of undeclared type `ReportFormat`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::ReportFormat;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `WidgetData` in this scope
[INFO] [stdout]    --> examples/analytics_dashboard.rs:130:13
[INFO] [stdout]     |
[INFO] [stdout] 130 |             WidgetData::KPI(kpi) => {
[INFO] [stdout]     |             ^^^^^^^^^^ use of undeclared type `WidgetData`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::dashboard::WidgetData;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `WidgetData` in this scope
[INFO] [stdout]    --> examples/analytics_dashboard.rs:137:13
[INFO] [stdout]     |
[INFO] [stdout] 137 |             WidgetData::Chart(chart) => {
[INFO] [stdout]     |             ^^^^^^^^^^ use of undeclared type `WidgetData`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::dashboard::WidgetData;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `WidgetData` in this scope
[INFO] [stdout]    --> examples/analytics_dashboard.rs:143:13
[INFO] [stdout]     |
[INFO] [stdout] 143 |             WidgetData::Alert(alerts) => {
[INFO] [stdout]     |             ^^^^^^^^^^ use of undeclared type `WidgetData`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::dashboard::WidgetData;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0422]: cannot find struct, variant or union type `AnalyticsConfig` in this scope
[INFO] [stdout]   --> examples/advanced_analytics.rs:22:28
[INFO] [stdout]    |
[INFO] [stdout] 22 |     let analytics_config = AnalyticsConfig {
[INFO] [stdout]    |                            ^^^^^^^^^^^^^^^ not found in this scope
[INFO] [stdout]    |
[INFO] [stdout] help: consider importing this struct
[INFO] [stdout]    |
[INFO] [stdout]  6 + use matchforge::analytics::metrics::AnalyticsConfig;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0422]: cannot find struct, variant or union type `MonitoringConfig` in this scope
[INFO] [stdout]   --> examples/advanced_analytics.rs:35:29
[INFO] [stdout]    |
[INFO] [stdout] 35 |     let monitoring_config = MonitoringConfig {
[INFO] [stdout]    |                             ^^^^^^^^^^^^^^^^ not found in this scope
[INFO] [stdout]    |
[INFO] [stdout] help: consider importing this struct
[INFO] [stdout]    |
[INFO] [stdout]  6 + use matchforge::telemetry::MonitoringConfig;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0422]: cannot find struct, variant or union type `AlertThresholds` in this scope
[INFO] [stdout]   --> examples/advanced_analytics.rs:38:27
[INFO] [stdout]    |
[INFO] [stdout] 38 |         alert_thresholds: AlertThresholds {
[INFO] [stdout]    |                           ^^^^^^^^^^^^^^^ not found in this scope
[INFO] [stdout]    |
[INFO] [stdout] help: consider importing this struct
[INFO] [stdout]    |
[INFO] [stdout]  6 + use matchforge::telemetry::monitoring::AlertThresholds;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0422]: cannot find struct, variant or union type `HealthCheckConfig` in this scope
[INFO] [stdout]   --> examples/advanced_analytics.rs:45:24
[INFO] [stdout]    |
[INFO] [stdout] 45 |         health_checks: HealthCheckConfig {
[INFO] [stdout]    |                        ^^^^^^^^^^^^^^^^^ not found in this scope
[INFO] [stdout]    |
[INFO] [stdout] help: consider importing this struct
[INFO] [stdout]    |
[INFO] [stdout]  6 + use matchforge::telemetry::monitoring::HealthCheckConfig;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `DefaultMetricsCollector` in this scope
[INFO] [stdout]   --> examples/advanced_analytics.rs:52:38
[INFO] [stdout]    |
[INFO] [stdout] 52 |     let metrics_collector = Arc::new(DefaultMetricsCollector::new());
[INFO] [stdout]    |                                      ^^^^^^^^^^^^^^^^^^^^^^^ use of undeclared type `DefaultMetricsCollector`
[INFO] [stdout]    |
[INFO] [stdout] help: a trait with a similar name exists
[INFO] [stdout]    |
[INFO] [stdout] 52 -     let metrics_collector = Arc::new(DefaultMetricsCollector::new());
[INFO] [stdout] 52 +     let metrics_collector = Arc::new(MetricsCollector::new());
[INFO] [stdout]    |
[INFO] [stdout] help: consider importing one of these structs
[INFO] [stdout]    |
[INFO] [stdout]  6 + use matchforge::analytics::metrics::DefaultMetricsCollector;
[INFO] [stdout]    |
[INFO] [stdout]  6 + use matchforge::telemetry::metrics::DefaultMetricsCollector;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `MemoryEventCollector` in this scope
[INFO] [stdout]   --> examples/advanced_analytics.rs:53:36
[INFO] [stdout]    |
[INFO] [stdout] 53 |     let event_collector = Arc::new(MemoryEventCollector::new(10000));
[INFO] [stdout]    |                                    ^^^^^^^^^^^^^^^^^^^^ use of undeclared type `MemoryEventCollector`
[INFO] [stdout]    |
[INFO] [stdout] help: a trait with a similar name exists
[INFO] [stdout]    |
[INFO] [stdout] 53 -     let event_collector = Arc::new(MemoryEventCollector::new(10000));
[INFO] [stdout] 53 +     let event_collector = Arc::new(EventCollector::new(10000));
[INFO] [stdout]    |
[INFO] [stdout] help: consider importing this struct
[INFO] [stdout]    |
[INFO] [stdout]  6 + use matchforge::telemetry::events::MemoryEventCollector;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `ReportType` in this scope
[INFO] [stdout]   --> examples/advanced_analytics.rs:78:9
[INFO] [stdout]    |
[INFO] [stdout] 78 |         ReportType::Performance,
[INFO] [stdout]    |         ^^^^^^^^^^ use of undeclared type `ReportType`
[INFO] [stdout]    |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]    |
[INFO] [stdout]  6 + use matchforge::analytics::ReportType;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `ReportType` in this scope
[INFO] [stdout]   --> examples/advanced_analytics.rs:79:9
[INFO] [stdout]    |
[INFO] [stdout] 79 |         ReportType::PlayerAnalytics,
[INFO] [stdout]    |         ^^^^^^^^^^ use of undeclared type `ReportType`
[INFO] [stdout]    |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]    |
[INFO] [stdout]  6 + use matchforge::analytics::ReportType;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `ReportType` in this scope
[INFO] [stdout]   --> examples/advanced_analytics.rs:80:9
[INFO] [stdout]    |
[INFO] [stdout] 80 |         ReportType::QueueAnalytics,
[INFO] [stdout]    |         ^^^^^^^^^^ use of undeclared type `ReportType`
[INFO] [stdout]    |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]    |
[INFO] [stdout]  6 + use matchforge::analytics::ReportType;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `ReportType` in this scope
[INFO] [stdout]   --> examples/advanced_analytics.rs:81:9
[INFO] [stdout]    |
[INFO] [stdout] 81 |         ReportType::RatingAnalytics,
[INFO] [stdout]    |         ^^^^^^^^^^ use of undeclared type `ReportType`
[INFO] [stdout]    |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]    |
[INFO] [stdout]  6 + use matchforge::analytics::ReportType;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `ReportType` in this scope
[INFO] [stdout]   --> examples/advanced_analytics.rs:82:9
[INFO] [stdout]    |
[INFO] [stdout] 82 |         ReportType::PartyAnalytics,
[INFO] [stdout]    |         ^^^^^^^^^^ use of undeclared type `ReportType`
[INFO] [stdout]    |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]    |
[INFO] [stdout]  6 + use matchforge::analytics::ReportType;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `ReportType` in this scope
[INFO] [stdout]   --> examples/advanced_analytics.rs:83:9
[INFO] [stdout]    |
[INFO] [stdout] 83 |         ReportType::SystemHealth,
[INFO] [stdout]    |         ^^^^^^^^^^ use of undeclared type `ReportType`
[INFO] [stdout]    |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]    |
[INFO] [stdout]  6 + use matchforge::analytics::ReportType;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `ReportType` in this scope
[INFO] [stdout]   --> examples/advanced_analytics.rs:84:9
[INFO] [stdout]    |
[INFO] [stdout] 84 |         ReportType::BusinessAnalytics,
[INFO] [stdout]    |         ^^^^^^^^^^ use of undeclared type `ReportType`
[INFO] [stdout]    |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]    |
[INFO] [stdout]  6 + use matchforge::analytics::ReportType;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `ReportFormat` in this scope
[INFO] [stdout]   --> examples/advanced_analytics.rs:92:13
[INFO] [stdout]    |
[INFO] [stdout] 92 |             ReportFormat::Json,
[INFO] [stdout]    |             ^^^^^^^^^^^^ use of undeclared type `ReportFormat`
[INFO] [stdout]    |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]    |
[INFO] [stdout]  6 + use matchforge::analytics::ReportFormat;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `PlayerActivityType` in this scope
[INFO] [stdout]    --> examples/advanced_analytics.rs:282:57
[INFO] [stdout]     |
[INFO] [stdout] 282 |             analytics.record_player_activity(player_id, PlayerActivityType::NewPlayer).await;
[INFO] [stdout]     |                                                         ^^^^^^^^^^^^^^^^^^ use of undeclared type `PlayerActivityType`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::PlayerActivityType;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `PlayerActivityType` in this scope
[INFO] [stdout]    --> examples/advanced_analytics.rs:307:61
[INFO] [stdout]     |
[INFO] [stdout] 307 |                 analytics.record_player_activity(player_id, PlayerActivityType::Logout).await;
[INFO] [stdout]     |                                                             ^^^^^^^^^^^^^^^^^^ use of undeclared type `PlayerActivityType`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::PlayerActivityType;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `QueueActivity` in this scope
[INFO] [stdout]    --> examples/advanced_analytics.rs:325:9
[INFO] [stdout]     |
[INFO] [stdout] 325 |         QueueActivity::PlayerLeft(wait_time),
[INFO] [stdout]     |         ^^^^^^^^^^^^^ use of undeclared type `QueueActivity`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::QueueActivity;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `QueueActivity` in this scope
[INFO] [stdout]    --> examples/advanced_analytics.rs:341:13
[INFO] [stdout]     |
[INFO] [stdout] 341 |             QueueActivity::MatchFound(wait_time),
[INFO] [stdout]     |             ^^^^^^^^^^^^^ use of undeclared type `QueueActivity`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::QueueActivity;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0422]: cannot find struct, variant or union type `MatchCompletionData` in this scope
[INFO] [stdout]    --> examples/advanced_analytics.rs:345:26
[INFO] [stdout]     |
[INFO] [stdout] 345 |         let match_data = MatchCompletionData {
[INFO] [stdout]     |                          ^^^^^^^^^^^^^^^^^^^ not found in this scope
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this struct
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::MatchCompletionData;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `QueueActivity` in this scope
[INFO] [stdout]    --> examples/advanced_analytics.rs:356:13
[INFO] [stdout]     |
[INFO] [stdout] 356 |             QueueActivity::PlayerLeft(wait_time),
[INFO] [stdout]     |             ^^^^^^^^^^^^^ use of undeclared type `QueueActivity`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::QueueActivity;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `QueueActivity` in this scope
[INFO] [stdout]    --> examples/advanced_analytics.rs:368:9
[INFO] [stdout]     |
[INFO] [stdout] 368 |         QueueActivity::MatchFound(wait_time),
[INFO] [stdout]     |         ^^^^^^^^^^^^^ use of undeclared type `QueueActivity`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::QueueActivity;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0422]: cannot find struct, variant or union type `MatchCompletionData` in this scope
[INFO] [stdout]    --> examples/advanced_analytics.rs:372:22
[INFO] [stdout]     |
[INFO] [stdout] 372 |     let match_data = MatchCompletionData {
[INFO] [stdout]     |                      ^^^^^^^^^^^^^^^^^^^ not found in this scope
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this struct
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::MatchCompletionData;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `PartyActivity` in this scope
[INFO] [stdout]    --> examples/advanced_analytics.rs:385:40
[INFO] [stdout]     |
[INFO] [stdout] 385 |     analytics.record_party_activity(3, PartyActivity::Created).await;
[INFO] [stdout]     |                                        ^^^^^^^^^^^^^ use of undeclared type `PartyActivity`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::PartyActivity;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `QueueActivity` in this scope
[INFO] [stdout]    --> examples/advanced_analytics.rs:390:9
[INFO] [stdout]     |
[INFO] [stdout] 390 |         QueueActivity::MatchFound(wait_time),
[INFO] [stdout]     |         ^^^^^^^^^^^^^ use of undeclared type `QueueActivity`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::QueueActivity;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `PartyActivity` in this scope
[INFO] [stdout]    --> examples/advanced_analytics.rs:393:40
[INFO] [stdout]     |
[INFO] [stdout] 393 |     analytics.record_party_activity(3, PartyActivity::MatchFound(true)).await;
[INFO] [stdout]     |                                        ^^^^^^^^^^^^^ use of undeclared type `PartyActivity`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::PartyActivity;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0422]: cannot find struct, variant or union type `MatchCompletionData` in this scope
[INFO] [stdout]    --> examples/advanced_analytics.rs:396:22
[INFO] [stdout]     |
[INFO] [stdout] 396 |     let match_data = MatchCompletionData {
[INFO] [stdout]     |                      ^^^^^^^^^^^^^^^^^^^ not found in this scope
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this struct
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::MatchCompletionData;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `PerformanceMetric` in this scope
[INFO] [stdout]    --> examples/advanced_analytics.rs:411:38
[INFO] [stdout]     |
[INFO] [stdout] 411 |         analytics.record_performance(PerformanceMetric::ApiResponseTime(api_time)).await;
[INFO] [stdout]     |                                      ^^^^^^^^^^^^^^^^^ use of undeclared type `PerformanceMetric`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::PerformanceMetric;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `PerformanceMetric` in this scope
[INFO] [stdout]    --> examples/advanced_analytics.rs:415:38
[INFO] [stdout]     |
[INFO] [stdout] 415 |         analytics.record_performance(PerformanceMetric::DatabaseQueryTime(db_time)).await;
[INFO] [stdout]     |                                      ^^^^^^^^^^^^^^^^^ use of undeclared type `PerformanceMetric`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::PerformanceMetric;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `PerformanceMetric` in this scope
[INFO] [stdout]    --> examples/advanced_analytics.rs:419:38
[INFO] [stdout]     |
[INFO] [stdout] 419 |         analytics.record_performance(PerformanceMetric::MemoryUsage(
[INFO] [stdout]     |                                      ^^^^^^^^^^^^^^^^^ use of undeclared type `PerformanceMetric`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::PerformanceMetric;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `PerformanceMetric` in this scope
[INFO] [stdout]    --> examples/advanced_analytics.rs:425:38
[INFO] [stdout]     |
[INFO] [stdout] 425 |         analytics.record_performance(PerformanceMetric::CpuUsage(cpu_usage)).await;
[INFO] [stdout]     |                                      ^^^^^^^^^^^^^^^^^ use of undeclared type `PerformanceMetric`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::PerformanceMetric;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find type `MetricsSnapshot` in this scope
[INFO] [stdout]    --> examples/advanced_analytics.rs:452:58
[INFO] [stdout]     |
[INFO] [stdout] 452 | async fn generate_performance_recommendations(snapshot: &MetricsSnapshot) -> Vec<Recommendation> {
[INFO] [stdout]     |                                                          ^^^^^^^^^^^^^^^ not found in this scope
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing one of these structs
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::MetricsSnapshot;
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::telemetry::metrics::MetricsSnapshot;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find type `MetricsSnapshot` in this scope
[INFO] [stdout]    --> examples/advanced_analytics.rs:542:61
[INFO] [stdout]     |
[INFO] [stdout] 542 | fn calculate_ltv(retention: &RetentionAnalytics, snapshot: &MetricsSnapshot) -> f64 {
[INFO] [stdout]     |                                                             ^^^^^^^^^^^^^^^ not found in this scope
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing one of these structs
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::MetricsSnapshot;
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::telemetry::metrics::MetricsSnapshot;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find type `MetricsSnapshot` in this scope
[INFO] [stdout]    --> examples/advanced_analytics.rs:557:23
[INFO] [stdout]     |
[INFO] [stdout] 557 |     metrics_snapshot: MetricsSnapshot,
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^ not found in this scope
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing one of these structs
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::MetricsSnapshot;
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::telemetry::metrics::MetricsSnapshot;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `WidgetData` in this scope
[INFO] [stdout]    --> examples/analytics_dashboard.rs:146:13
[INFO] [stdout]     |
[INFO] [stdout] 146 |             WidgetData::Insight(insights) => {
[INFO] [stdout]     |             ^^^^^^^^^^ use of undeclared type `WidgetData`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::dashboard::WidgetData;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `PlayerActivityType` in this scope
[INFO] [stdout]    --> examples/analytics_dashboard.rs:225:53
[INFO] [stdout]     |
[INFO] [stdout] 225 |         analytics.record_player_activity(player_id, PlayerActivityType::NewPlayer).await;
[INFO] [stdout]     |                                                     ^^^^^^^^^^^^^^^^^^ use of undeclared type `PlayerActivityType`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::PlayerActivityType;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `HashMap` in this scope
[INFO] [stdout]    --> examples/analytics_dashboard.rs:239:32
[INFO] [stdout]     |
[INFO] [stdout] 239 |             custom_attributes: HashMap::new(),
[INFO] [stdout]     |                                ^^^^^^^ use of undeclared type `HashMap`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this struct
[INFO] [stdout]     |
[INFO] [stdout]   6 + use std::collections::HashMap;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `QueueActivity` in this scope
[INFO] [stdout]    --> examples/analytics_dashboard.rs:252:13
[INFO] [stdout]     |
[INFO] [stdout] 252 |             QueueActivity::PlayerJoined,
[INFO] [stdout]     |             ^^^^^^^^^^^^^ use of undeclared type `QueueActivity`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::QueueActivity;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `QueueActivity` in this scope
[INFO] [stdout]    --> examples/analytics_dashboard.rs:261:17
[INFO] [stdout]     |
[INFO] [stdout] 261 |                 QueueActivity::MatchFound(wait_time),
[INFO] [stdout]     |                 ^^^^^^^^^^^^^ use of undeclared type `QueueActivity`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::QueueActivity;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0422]: cannot find struct, variant or union type `MatchCompletionData` in this scope
[INFO] [stdout]    --> examples/analytics_dashboard.rs:265:30
[INFO] [stdout]     |
[INFO] [stdout] 265 |             let match_data = MatchCompletionData {
[INFO] [stdout]     |                              ^^^^^^^^^^^^^^^^^^^ not found in this scope
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this struct
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::MatchCompletionData;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `QueueActivity` in this scope
[INFO] [stdout]    --> examples/analytics_dashboard.rs:278:17
[INFO] [stdout]     |
[INFO] [stdout] 278 |                 QueueActivity::PlayerLeft(wait_time),
[INFO] [stdout]     |                 ^^^^^^^^^^^^^ use of undeclared type `QueueActivity`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::QueueActivity;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `PartyActivity` in this scope
[INFO] [stdout]    --> examples/analytics_dashboard.rs:285:48
[INFO] [stdout]     |
[INFO] [stdout] 285 |             analytics.record_party_activity(3, PartyActivity::Created).await;
[INFO] [stdout]     |                                                ^^^^^^^^^^^^^ use of undeclared type `PartyActivity`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::PartyActivity;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `PartyActivity` in this scope
[INFO] [stdout]    --> examples/analytics_dashboard.rs:293:48
[INFO] [stdout]     |
[INFO] [stdout] 293 |             analytics.record_party_activity(3, PartyActivity::MatchFound(true)).await;
[INFO] [stdout]     |                                                ^^^^^^^^^^^^^ use of undeclared type `PartyActivity`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::PartyActivity;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `PerformanceMetric` in this scope
[INFO] [stdout]    --> examples/analytics_dashboard.rs:297:38
[INFO] [stdout]     |
[INFO] [stdout] 297 |         analytics.record_performance(PerformanceMetric::ApiResponseTime(
[INFO] [stdout]     |                                      ^^^^^^^^^^^^^^^^^ use of undeclared type `PerformanceMetric`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::PerformanceMetric;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `PerformanceMetric` in this scope
[INFO] [stdout]    --> examples/analytics_dashboard.rs:301:38
[INFO] [stdout]     |
[INFO] [stdout] 301 |         analytics.record_performance(PerformanceMetric::DatabaseQueryTime(
[INFO] [stdout]     |                                      ^^^^^^^^^^^^^^^^^ use of undeclared type `PerformanceMetric`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::PerformanceMetric;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `PerformanceMetric` in this scope
[INFO] [stdout]    --> examples/analytics_dashboard.rs:306:42
[INFO] [stdout]     |
[INFO] [stdout] 306 |             analytics.record_performance(PerformanceMetric::MemoryUsage(
[INFO] [stdout]     |                                          ^^^^^^^^^^^^^^^^^ use of undeclared type `PerformanceMetric`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::PerformanceMetric;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find type `PerformanceMetric` in this scope
[INFO] [stdout]    --> examples/analytics_dashboard.rs:310:42
[INFO] [stdout]     |
[INFO] [stdout] 310 |             analytics.record_performance(PerformanceMetric::CpuUsage(
[INFO] [stdout]     |                                          ^^^^^^^^^^^^^^^^^ use of undeclared type `PerformanceMetric`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout]   6 + use matchforge::analytics::metrics::PerformanceMetric;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0560]: struct `matchforge::EntryMetadata` has no field named `preferred_roles`
[INFO] [stdout]    --> examples/analytics_dashboard.rs:233:13
[INFO] [stdout]     |
[INFO] [stdout] 233 |             preferred_roles: vec![
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^ `matchforge::EntryMetadata` does not have this field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available fields are: `roles`, `region`, `custom`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0560]: struct `matchforge::EntryMetadata` has no field named `avoided_players`
[INFO] [stdout]    --> examples/analytics_dashboard.rs:238:13
[INFO] [stdout]     |
[INFO] [stdout] 238 |             avoided_players: vec![],
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^ `matchforge::EntryMetadata` does not have this field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available fields are: `roles`, `region`, `custom`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0560]: struct `matchforge::EntryMetadata` has no field named `custom_attributes`
[INFO] [stdout]    --> examples/analytics_dashboard.rs:239:13
[INFO] [stdout]     |
[INFO] [stdout] 239 |             custom_attributes: HashMap::new(),
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^ `matchforge::EntryMetadata` does not have this field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available fields are: `roles`, `region`, `custom`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `time_range`
[INFO] [stdout]    --> src/analytics/dashboard.rs:603:38
[INFO] [stdout]     |
[INFO] [stdout] 603 |     async fn generate_widgets(&self, time_range: &TimeRange) -> Result<Vec<Widget>, DashboardError> {
[INFO] [stdout]     |                                      ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_time_range`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find module or crate `env_logger` in this scope
[INFO] [stdout]   --> examples/analytics_dashboard.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 |     env_logger::init();
[INFO] [stdout]    |     ^^^^^^^^^^ use of unresolved module or unlinked crate `env_logger`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `env_logger`, use `cargo add env_logger` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0560]: struct `matchforge::MatchConstraints` has no field named `max_rating_difference`
[INFO] [stdout]   --> examples/analytics_dashboard.rs:55:17
[INFO] [stdout]    |
[INFO] [stdout] 55 |                 max_rating_difference: 200,
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^^^ `matchforge::MatchConstraints` does not have this field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `max_rating_delta`, `same_region_required`, `max_wait_time_seconds`, `expansion_rate`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0560]: struct `matchforge::MatchConstraints` has no field named `max_wait_time`
[INFO] [stdout]   --> examples/analytics_dashboard.rs:56:17
[INFO] [stdout]    |
[INFO] [stdout] 56 |                 max_wait_time: Duration::from_secs(300),
[INFO] [stdout]    |                 ^^^^^^^^^^^^^ `matchforge::MatchConstraints` does not have this field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `max_rating_delta`, `same_region_required`, `max_wait_time_seconds`, `expansion_rate`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: cannot add `f64` to `{integer}`
[INFO] [stdout]    --> examples/advanced_analytics.rs:418:32
[INFO] [stdout]     |
[INFO] [stdout] 418 |         let memory_usage = 512 + (i as f64 * 10.0).sin() * 256.0 + 512.0; // Oscillating pattern
[INFO] [stdout]     |                                ^ no implementation for `{integer} + f64`
[INFO] [stdout]     |
[INFO] [stdout]     = help: the trait `Add<f64>` is not implemented for `{integer}`
[INFO] [stdout]     = help: the following other types implement trait `Add<Rhs>`:
[INFO] [stdout]               `&f128` implements `Add<f128>`
[INFO] [stdout]               `&f128` implements `Add`
[INFO] [stdout]               `&f16` implements `Add<f16>`
[INFO] [stdout]               `&f16` implements `Add`
[INFO] [stdout]               `&f32` implements `Add<f32>`
[INFO] [stdout]               `&f32` implements `Add`
[INFO] [stdout]               `&f64` implements `Add<f64>`
[INFO] [stdout]               `&f64` implements `Add`
[INFO] [stdout]             and 68 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `?` couldn't convert the error to `MatchForgeError`
[INFO] [stdout]   --> examples/analytics_dashboard.rs:80:60
[INFO] [stdout]    |
[INFO] [stdout] 80 |     let insights = insight_engine.generate_insights().await?;
[INFO] [stdout]    |                    ----------------------------------------^ the trait `From<InsightError>` is not implemented for `MatchForgeError`
[INFO] [stdout]    |                    |
[INFO] [stdout]    |                    this can't be annotated with `?` because it has type `Result<_, InsightError>`
[INFO] [stdout]    |
[INFO] [stdout]    = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `?` couldn't convert the error to `MatchForgeError`
[INFO] [stdout]    --> examples/analytics_dashboard.rs:103:12
[INFO] [stdout]     |
[INFO] [stdout]  99 |       let performance_report = report_generator.generate_report(
[INFO] [stdout]     |  ______________________________-
[INFO] [stdout] 100 | |         ReportType::Performance,
[INFO] [stdout] 101 | |         None,
[INFO] [stdout] 102 | |         ReportFormat::Json,
[INFO] [stdout] 103 | |     ).await?;
[INFO] [stdout]     | |           -^ the trait `From<ReportError>` is not implemented for `MatchForgeError`
[INFO] [stdout]     | |___________|
[INFO] [stdout]     |             this can't be annotated with `?` because it has type `Result<_, ReportError>`
[INFO] [stdout]     |
[INFO] [stdout]     = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `?` couldn't convert the error to `MatchForgeError`
[INFO] [stdout]    --> examples/analytics_dashboard.rs:111:66
[INFO] [stdout]     |
[INFO] [stdout] 111 |     let dashboard = dashboard_data.generate_dashboard(None).await?;
[INFO] [stdout]     |                     ---------------------------------------------^ the trait `From<DashboardError>` is not implemented for `MatchForgeError`
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     this can't be annotated with `?` because it has type `Result<_, DashboardError>`
[INFO] [stdout]     |
[INFO] [stdout]     = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `?` couldn't convert the error to `MatchForgeError`
[INFO] [stdout]    --> examples/analytics_dashboard.rs:194:66
[INFO] [stdout]     |
[INFO] [stdout] 194 |     let dashboard_json = serde_json::to_string_pretty(&dashboard)?;
[INFO] [stdout]     |                          ----------------------------------------^ the trait `From<serde_json::Error>` is not implemented for `MatchForgeError`
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          this can't be annotated with `?` because it has type `Result<_, serde_json::Error>`
[INFO] [stdout]     |
[INFO] [stdout]     = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `?` couldn't convert the error to `MatchForgeError`
[INFO] [stdout]    --> examples/analytics_dashboard.rs:197:68
[INFO] [stdout]     |
[INFO] [stdout] 197 |     tokio::fs::write("dashboard_export.json", dashboard_json).await?;
[INFO] [stdout]     |     ---------------------------------------------------------------^ the trait `From<futures_io::Error>` is not implemented for `MatchForgeError`
[INFO] [stdout]     |     |
[INFO] [stdout]     |     this can't be annotated with `?` because it has type `Result<_, futures_io::Error>`
[INFO] [stdout]     |
[INFO] [stdout]     = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `?` couldn't convert the error to `MatchForgeError`
[INFO] [stdout]    --> examples/analytics_dashboard.rs:201:64
[INFO] [stdout]     |
[INFO] [stdout] 201 |     let insights_json = serde_json::to_string_pretty(&insights)?;
[INFO] [stdout]     |                         ---------------------------------------^ the trait `From<serde_json::Error>` is not implemented for `MatchForgeError`
[INFO] [stdout]     |                         |
[INFO] [stdout]     |                         this can't be annotated with `?` because it has type `Result<_, serde_json::Error>`
[INFO] [stdout]     |
[INFO] [stdout]     = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `?` couldn't convert the error to `MatchForgeError`
[INFO] [stdout]    --> examples/analytics_dashboard.rs:202:66
[INFO] [stdout]     |
[INFO] [stdout] 202 |     tokio::fs::write("insights_export.json", insights_json).await?;
[INFO] [stdout]     |     -------------------------------------------------------------^ the trait `From<futures_io::Error>` is not implemented for `MatchForgeError`
[INFO] [stdout]     |     |
[INFO] [stdout]     |     this can't be annotated with `?` because it has type `Result<_, futures_io::Error>`
[INFO] [stdout]     |
[INFO] [stdout]     = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0277, E0422, E0433, E0560.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0277`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `matchforge` (example "analytics_dashboard") due to 34 previous errors
[INFO] [stdout] warning: unused variable: `connection_string`
[INFO] [stdout]    --> src/persistence/redis.rs:118:22
[INFO] [stdout]     |
[INFO] [stdout] 118 |     pub async fn new(connection_string: &str) -> Result<Self> {
[INFO] [stdout]     |                      ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_connection_string`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no function or associated item named `from_minutes` found for struct `std::time::Duration` in the current scope
[INFO] [stdout]    --> examples/advanced_analytics.rs:442:76
[INFO] [stdout]     |
[INFO] [stdout] 442 |     let session_factor = if retention.average_session_duration < Duration::from_minutes(15) {
[INFO] [stdout]     |                                                                            ^^^^^^^^^^^^ function or associated item not found in `std::time::Duration`
[INFO] [stdout]     |
[INFO] [stdout] note: if you're trying to build a new `std::time::Duration` consider using one of the following associated functions:
[INFO] [stdout]       std::time::Duration::new
[INFO] [stdout]       std::time::Duration::from_secs
[INFO] [stdout]       std::time::Duration::from_millis
[INFO] [stdout]       std::time::Duration::from_micros
[INFO] [stdout]       and 10 others
[INFO] [stdout]    --> /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/time.rs:194:4
[INFO] [stdout] help: there is an associated function `from_mins` with a similar name
[INFO] [stdout]     |
[INFO] [stdout] 442 -     let session_factor = if retention.average_session_duration < Duration::from_minutes(15) {
[INFO] [stdout] 442 +     let session_factor = if retention.average_session_duration < Duration::from_mins(15) {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> examples/advanced_analytics.rs:527:36
[INFO] [stdout]     |
[INFO] [stdout] 527 |     let player_ltv = calculate_ltv(&retention, &snapshot);
[INFO] [stdout]     |                      ------------- ^^^^^^^^^^ expected `RetentionAnalytics`, found a different `RetentionAnalytics`
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      arguments to this function are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: `RetentionAnalytics` and `RetentionAnalytics` have similar names, but are actually distinct types
[INFO] [stdout] note: `RetentionAnalytics` is defined in crate `matchforge`
[INFO] [stdout]    --> src/analytics/metrics.rs:547:1
[INFO] [stdout]     |
[INFO] [stdout] 547 | pub struct RetentionAnalytics {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] note: `RetentionAnalytics` is defined in the current crate
[INFO] [stdout]    --> examples/advanced_analytics.rs:624:1
[INFO] [stdout]     |
[INFO] [stdout] 624 | struct RetentionAnalytics {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] note: function defined here
[INFO] [stdout]    --> examples/advanced_analytics.rs:542:4
[INFO] [stdout]     |
[INFO] [stdout] 542 | fn calculate_ltv(retention: &RetentionAnalytics, snapshot: &MetricsSnapshot) -> f64 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^ ------------------------------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find module or crate `env_logger` in this scope
[INFO] [stdout]   --> examples/advanced_analytics.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 |     env_logger::init();
[INFO] [stdout]    |     ^^^^^^^^^^ use of unresolved module or unlinked crate `env_logger`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `env_logger`, use `cargo add env_logger` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ip`
[INFO] [stdout]    --> src/security/security.rs:199:28
[INFO] [stdout]     |
[INFO] [stdout] 199 |         } else if let Some(ip) = &request.remote_addr {
[INFO] [stdout]     |                            ^^ help: if this is intentional, prefix it with an underscore: `_ip`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `hash`
[INFO] [stdout]    --> src/security/security.rs:201:17
[INFO] [stdout]     |
[INFO] [stdout] 201 |             let hash = std::collections::hash_map::DefaultHasher::new();
[INFO] [stdout]     |                 ^^^^ help: if this is intentional, prefix it with an underscore: `_hash`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `session_id`
[INFO] [stdout]    --> src/security/security.rs:236:32
[INFO] [stdout]     |
[INFO] [stdout] 236 |     fn validate_session(&self, session_id: &str) -> Result<Option<Uuid>, SecurityError> {
[INFO] [stdout]     |                                ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_session_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no function or associated item named `days` found for struct `std::time::Duration` in the current scope
[INFO] [stdout]   --> examples/advanced_analytics.rs:23:37
[INFO] [stdout]    |
[INFO] [stdout] 23 |         retention_period: Duration::days(90),
[INFO] [stdout]    |                                     ^^^^ function or associated item not found in `std::time::Duration`
[INFO] [stdout]    |
[INFO] [stdout] note: if you're trying to build a new `std::time::Duration` consider using one of the following associated functions:
[INFO] [stdout]       std::time::Duration::new
[INFO] [stdout]       std::time::Duration::from_secs
[INFO] [stdout]       std::time::Duration::from_millis
[INFO] [stdout]       std::time::Duration::from_micros
[INFO] [stdout]       and 10 others
[INFO] [stdout]   --> /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/time.rs:194:4
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> examples/advanced_analytics.rs:117:32
[INFO] [stdout]     |
[INFO] [stdout] 117 |         insights_by_type.entry(insight.insight_type.clone())
[INFO] [stdout]     |                          ----- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `InsightType`, found `matchforge::analytics::InsightType`
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: `matchforge::analytics::InsightType` and `InsightType` have similar names, but are actually distinct types
[INFO] [stdout] note: `matchforge::analytics::InsightType` is defined in crate `matchforge`
[INFO] [stdout]    --> src/analytics/insights.rs:43:1
[INFO] [stdout]     |
[INFO] [stdout]  43 | pub enum InsightType {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] note: `InsightType` is defined in the current crate
[INFO] [stdout]    --> examples/advanced_analytics.rs:634:1
[INFO] [stdout]     |
[INFO] [stdout] 634 | enum InsightType {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^
[INFO] [stdout] help: the return type of this call is `matchforge::analytics::InsightType` due to the type of the argument passed
[INFO] [stdout]    --> examples/advanced_analytics.rs:117:9
[INFO] [stdout]     |
[INFO] [stdout] 117 |         insights_by_type.entry(insight.insight_type.clone())
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^----------------------------^
[INFO] [stdout]     |                                |
[INFO] [stdout]     |                                this argument influences the return type of `entry`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/collections/hash/map.rs:979:11
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0658]: use of unstable library feature `duration_constructors`
[INFO] [stdout]    --> examples/advanced_analytics.rs:156:41
[INFO] [stdout]     |
[INFO] [stdout] 156 |         if predicted_time_to_overflow < Duration::from_days(1) {
[INFO] [stdout]     |                                         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: see issue #120301 <https://github.com/rust-lang/rust/issues/120301> for more information
[INFO] [stdout]     = help: add `#![feature(duration_constructors)]` to the crate attributes to enable
[INFO] [stdout]     = note: this compiler was built on 2026-03-19; consider upgrading it if it is out of date
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> examples/advanced_analytics.rs:167:43
[INFO] [stdout]     |
[INFO] [stdout] 167 |     let churn_risk = calculate_churn_risk(&retention).await;
[INFO] [stdout]     |                      -------------------- ^^^^^^^^^^ expected `RetentionAnalytics`, found a different `RetentionAnalytics`
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      arguments to this function are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: `RetentionAnalytics` and `RetentionAnalytics` have similar names, but are actually distinct types
[INFO] [stdout] note: `RetentionAnalytics` is defined in crate `matchforge`
[INFO] [stdout]    --> src/analytics/metrics.rs:547:1
[INFO] [stdout]     |
[INFO] [stdout] 547 | pub struct RetentionAnalytics {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] note: `RetentionAnalytics` is defined in the current crate
[INFO] [stdout]    --> examples/advanced_analytics.rs:624:1
[INFO] [stdout]     |
[INFO] [stdout] 624 | struct RetentionAnalytics {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] note: function defined here
[INFO] [stdout]    --> examples/advanced_analytics.rs:439:10
[INFO] [stdout]     |
[INFO] [stdout] 439 | async fn calculate_churn_risk(retention: &RetentionAnalytics) -> f64 {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^^ ------------------------------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the `?` operator can only be applied to values that implement `Try`
[INFO] [stdout]    --> examples/advanced_analytics.rs:199:25
[INFO] [stdout]     |
[INFO] [stdout] 199 |     let health_status = monitoring_service.get_system_health().await?;
[INFO] [stdout]     |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the `?` operator cannot be applied to type `matchforge::telemetry::monitoring::SystemHealth`
[INFO] [stdout]     |
[INFO] [stdout]     = help: the nightly-only, unstable trait `Try` is not implemented for `matchforge::telemetry::monitoring::SystemHealth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the `?` operator can only be applied to values that implement `Try`
[INFO] [stdout]    --> examples/advanced_analytics.rs:209:18
[INFO] [stdout]     |
[INFO] [stdout] 209 |     let alerts = monitoring_service.get_alerts().await?;
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the `?` operator cannot be applied to type `Vec<matchforge::telemetry::monitoring::Alert>`
[INFO] [stdout]     |
[INFO] [stdout]     = help: the nightly-only, unstable trait `Try` is not implemented for `Vec<matchforge::telemetry::monitoring::Alert>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> examples/advanced_analytics.rs:227:9
[INFO] [stdout]     |
[INFO] [stdout] 227 |         insights,
[INFO] [stdout]     |         ^^^^^^^^ expected `Insight`, found `matchforge::analytics::insights::Insight`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `matchforge::analytics::insights::Insight` and `Insight` have similar names, but are actually distinct types
[INFO] [stdout] note: `matchforge::analytics::insights::Insight` is defined in crate `matchforge`
[INFO] [stdout]    --> src/analytics/insights.rs:68:1
[INFO] [stdout]     |
[INFO] [stdout]  68 | pub struct Insight {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] note: `Insight` is defined in the current crate
[INFO] [stdout]    --> examples/advanced_analytics.rs:589:1
[INFO] [stdout]     |
[INFO] [stdout] 589 | struct Insight {
[INFO] [stdout]     | ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> examples/advanced_analytics.rs:228:9
[INFO] [stdout]     |
[INFO] [stdout]  95 |         reports.push(report.clone());
[INFO] [stdout]     |         -------      -------------- this argument has type `matchforge::analytics::reports::Report`...
[INFO] [stdout]     |         |
[INFO] [stdout]     |         ... which causes `reports` to have type `Vec<matchforge::analytics::reports::Report>`
[INFO] [stdout] ...
[INFO] [stdout] 228 |         reports,
[INFO] [stdout]     |         ^^^^^^^ expected `Report`, found `matchforge::analytics::reports::Report`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `matchforge::analytics::reports::Report` and `Report` have similar names, but are actually distinct types
[INFO] [stdout] note: `matchforge::analytics::reports::Report` is defined in crate `matchforge`
[INFO] [stdout]    --> src/analytics/reports.rs:103:1
[INFO] [stdout]     |
[INFO] [stdout] 103 | pub struct Report {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^
[INFO] [stdout] note: `Report` is defined in the current crate
[INFO] [stdout]    --> examples/advanced_analytics.rs:572:1
[INFO] [stdout]     |
[INFO] [stdout] 572 | struct Report {
[INFO] [stdout]     | ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> examples/advanced_analytics.rs:230:30
[INFO] [stdout]     |
[INFO] [stdout] 230 |         retention_analytics: retention,
[INFO] [stdout]     |                              ^^^^^^^^^ expected `RetentionAnalytics`, found a different `RetentionAnalytics`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `RetentionAnalytics` and `RetentionAnalytics` have similar names, but are actually distinct types
[INFO] [stdout] note: `RetentionAnalytics` is defined in crate `matchforge`
[INFO] [stdout]    --> src/analytics/metrics.rs:547:1
[INFO] [stdout]     |
[INFO] [stdout] 547 | pub struct RetentionAnalytics {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] note: `RetentionAnalytics` is defined in the current crate
[INFO] [stdout]    --> examples/advanced_analytics.rs:624:1
[INFO] [stdout]     |
[INFO] [stdout] 624 | struct RetentionAnalytics {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `?` couldn't convert the error to `MatchForgeError`
[INFO] [stdout]   --> examples/advanced_analytics.rs:93:16
[INFO] [stdout]    |
[INFO] [stdout] 89 |           let report = report_generator.generate_report(
[INFO] [stdout]    |  ______________________-
[INFO] [stdout] 90 | |             report_type.clone(),
[INFO] [stdout] 91 | |             None,
[INFO] [stdout] 92 | |             ReportFormat::Json,
[INFO] [stdout] 93 | |         ).await?;
[INFO] [stdout]    | |               -^ the trait `From<ReportError>` is not implemented for `MatchForgeError`
[INFO] [stdout]    | |_______________|
[INFO] [stdout]    |                 this can't be annotated with `?` because it has type `Result<_, ReportError>`
[INFO] [stdout]    |
[INFO] [stdout]    = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `?` couldn't convert the error to `MatchForgeError`
[INFO] [stdout]    --> examples/advanced_analytics.rs:112:60
[INFO] [stdout]     |
[INFO] [stdout] 112 |     let insights = insight_engine.generate_insights().await?;
[INFO] [stdout]     |                    ----------------------------------------^ the trait `From<InsightError>` is not implemented for `MatchForgeError`
[INFO] [stdout]     |                    |
[INFO] [stdout]     |                    this can't be annotated with `?` because it has type `Result<_, InsightError>`
[INFO] [stdout]     |
[INFO] [stdout]     = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `?` couldn't convert the error to `MatchForgeError`
[INFO] [stdout]    --> examples/advanced_analytics.rs:235:65
[INFO] [stdout]     |
[INFO] [stdout] 235 |     let export_json = serde_json::to_string_pretty(&export_data)?;
[INFO] [stdout]     |                       ------------------------------------------^ the trait `From<serde_json::Error>` is not implemented for `MatchForgeError`
[INFO] [stdout]     |                       |
[INFO] [stdout]     |                       this can't be annotated with `?` because it has type `Result<_, serde_json::Error>`
[INFO] [stdout]     |
[INFO] [stdout]     = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `?` couldn't convert the error to `MatchForgeError`
[INFO] [stdout]    --> examples/advanced_analytics.rs:236:74
[INFO] [stdout]     |
[INFO] [stdout] 236 |     tokio::fs::write("advanced_analytics_export.json", export_json).await?;
[INFO] [stdout]     |     ---------------------------------------------------------------------^ the trait `From<futures_io::Error>` is not implemented for `MatchForgeError`
[INFO] [stdout]     |     |
[INFO] [stdout]     |     this can't be annotated with `?` because it has type `Result<_, futures_io::Error>`
[INFO] [stdout]     |
[INFO] [stdout]     = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `analytics`
[INFO] [stdout]    --> examples/advanced_analytics.rs:432:32
[INFO] [stdout]     |
[INFO] [stdout] 432 | async fn calculate_growth_rate(analytics: &AnalyticsMetrics) -> f64 {
[INFO] [stdout]     |                                ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_analytics`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `matches_per_hour`, `rating_accuracy`, `solo_vs_party_win_rates`, and `daily_metrics` are never read
[INFO] [stdout]   --> src/analytics/metrics.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct AnalyticsMetrics {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 24 |     matches_per_hour: AtomicU64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     rating_accuracy: AtomicI64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     solo_vs_party_win_rates: Arc<RwLock<HashMap<String, f64>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     daily_metrics: Arc<RwLock<VecDeque<DailyMetrics>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `ml_models` is never read
[INFO] [stdout]   --> src/analytics/insights.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct InsightEngine {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 19 |     ml_models: Arc<RwLock<HashMap<InsightType, MLModel>>>,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `model_type`, `accuracy`, `last_trained`, and `training_data_size` are never read
[INFO] [stdout]    --> src/analytics/insights.rs:176:5
[INFO] [stdout]     |
[INFO] [stdout] 175 | struct MLModel {
[INFO] [stdout]     |        ------- fields in this struct
[INFO] [stdout] 176 |     model_type: ModelType,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 177 |     accuracy: f64,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 178 |     last_trained: DateTime<Utc>,
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 179 |     training_data_size: usize,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `MLModel` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `LinearRegression`, `TimeSeries`, `AnomalyDetection`, `Clustering`, and `Classification` are never constructed
[INFO] [stdout]    --> src/analytics/insights.rs:185:5
[INFO] [stdout]     |
[INFO] [stdout] 184 | enum ModelType {
[INFO] [stdout]     |      --------- variants in this enum
[INFO] [stdout] 185 |     LinearRegression,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 186 |     TimeSeries,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 187 |     AnomalyDetection,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 188 |     Clustering,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 189 |     Classification,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ModelType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `report_generator` is never read
[INFO] [stdout]   --> src/analytics/dashboard.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct DashboardData {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 16 |     analytics: Arc<AnalyticsMetrics>,
[INFO] [stdout] 17 |     report_generator: Arc<ReportGenerator>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `tau` is never read
[INFO] [stdout]   --> src/mmr/algorithm.rs:64:5
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub struct Glicko2Algorithm {
[INFO] [stdout]    |            ---------------- field in this struct
[INFO] [stdout] 64 |     tau: f64, // System volatility constant
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `calculate_match_quality` is never used
[INFO] [stdout]    --> src/queue/advanced_strategies.rs:136:8
[INFO] [stdout]     |
[INFO] [stdout]  21 | impl SwissMatcher {
[INFO] [stdout]     | ----------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 136 |     fn calculate_match_quality(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `constraints_satisfied` is never used
[INFO] [stdout]    --> src/queue/advanced_strategies.rs:416:8
[INFO] [stdout]     |
[INFO] [stdout] 355 | impl AdaptiveMatcher {
[INFO] [stdout]     | -------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 416 |     fn constraints_satisfied(&self, entry: &QueueEntry, constraints: &MatchConstraints) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `rate_limiter` is never read
[INFO] [stdout]   --> src/security/anti_abuse.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct AntiAbuseSystem {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] 17 |     config: AntiAbuseConfig,
[INFO] [stdout] 18 |     rate_limiter: RateLimiter,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `player_id`, `reports_received`, `reports_made`, `matches_abandoned`, and `suspicious_activities` are never read
[INFO] [stdout]    --> src/security/anti_abuse.rs:128:5
[INFO] [stdout]     |
[INFO] [stdout] 127 | struct PlayerBehavior {
[INFO] [stdout]     |        -------------- fields in this struct
[INFO] [stdout] 128 |     player_id: Uuid,
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     reports_received: Vec<DateTime<Utc>>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 133 |     reports_made: Vec<DateTime<Utc>>,
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 134 |     matches_abandoned: Vec<DateTime<Utc>>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 135 |     suspicious_activities: Vec<SuspiciousActivity>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `PlayerBehavior` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `event_type` is never read
[INFO] [stdout]    --> src/telemetry/events.rs:351:5
[INFO] [stdout]     |
[INFO] [stdout] 350 | pub struct EventBuilder {
[INFO] [stdout]     |            ------------ field in this struct
[INFO] [stdout] 351 |     event_type: EventType,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `matchforge` (example "advanced_analytics") due to 50 previous errors; 1 warning emitted
[INFO] [stdout] Some errors have detailed explanations: E0277, E0308, E0422, E0425, E0433, E0599, E0658.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0277`.
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 |     async fn get<T>(&mut self, key: &str) -> Result<T>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout]    = note: `#[warn(async_fn_in_trait)]` on by default
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 19 -     async fn get<T>(&mut self, key: &str) -> Result<T>;
[INFO] [stdout] 19 +     fn get<T>(&mut self, key: &str) -> impl std::future::Future<Output = Result<T>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 |     async fn set(&mut self, key: &str, value: &str) -> Result<()>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 20 -     async fn set(&mut self, key: &str, value: &str) -> Result<()>;
[INFO] [stdout] 20 +     fn set(&mut self, key: &str, value: &str) -> impl std::future::Future<Output = Result<()>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 |     async fn set_ex(&mut self, key: &str, value: &str, seconds: usize) -> Result<()>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 21 -     async fn set_ex(&mut self, key: &str, value: &str, seconds: usize) -> Result<()>;
[INFO] [stdout] 21 +     fn set_ex(&mut self, key: &str, value: &str, seconds: usize) -> impl std::future::Future<Output = Result<()>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 |     async fn del(&mut self, key: &str) -> Result<()>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 22 -     async fn del(&mut self, key: &str) -> Result<()>;
[INFO] [stdout] 22 +     fn del(&mut self, key: &str) -> impl std::future::Future<Output = Result<()>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 |     async fn sadd(&mut self, key: &str, member: &str) -> Result<()>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 23 -     async fn sadd(&mut self, key: &str, member: &str) -> Result<()>;
[INFO] [stdout] 23 +     fn sadd(&mut self, key: &str, member: &str) -> impl std::future::Future<Output = Result<()>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     async fn srem(&mut self, key: &str, member: &str) -> Result<()>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 24 -     async fn srem(&mut self, key: &str, member: &str) -> Result<()>;
[INFO] [stdout] 24 +     fn srem(&mut self, key: &str, member: &str) -> impl std::future::Future<Output = Result<()>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     async fn smembers(&mut self, key: &str) -> Result<Vec<String>>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 25 -     async fn smembers(&mut self, key: &str) -> Result<Vec<String>>;
[INFO] [stdout] 25 +     fn smembers(&mut self, key: &str) -> impl std::future::Future<Output = Result<Vec<String>>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     async fn lpush(&mut self, key: &str, value: &str) -> Result<()>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 26 -     async fn lpush(&mut self, key: &str, value: &str) -> Result<()>;
[INFO] [stdout] 26 +     fn lpush(&mut self, key: &str, value: &str) -> impl std::future::Future<Output = Result<()>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     async fn ltrim(&mut self, key: &str, start: isize, stop: isize) -> Result<()>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 27 -     async fn ltrim(&mut self, key: &str, start: isize, stop: isize) -> Result<()>;
[INFO] [stdout] 27 +     fn ltrim(&mut self, key: &str, start: isize, stop: isize) -> impl std::future::Future<Output = Result<()>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     async fn zadd(&mut self, key: &str, score: f64, member: &str) -> Result<()>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 28 -     async fn zadd(&mut self, key: &str, score: f64, member: &str) -> Result<()>;
[INFO] [stdout] 28 +     fn zadd(&mut self, key: &str, score: f64, member: &str) -> impl std::future::Future<Output = Result<()>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     async fn zrem(&mut self, key: &str, member: &str) -> Result<()>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 29 -     async fn zrem(&mut self, key: &str, member: &str) -> Result<()>;
[INFO] [stdout] 29 +     fn zrem(&mut self, key: &str, member: &str) -> impl std::future::Future<Output = Result<()>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     async fn zrange(&mut self, key: &str, start: isize, stop: isize) -> Result<Vec<String>>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 30 -     async fn zrange(&mut self, key: &str, start: isize, stop: isize) -> Result<Vec<String>>;
[INFO] [stdout] 30 +     fn zrange(&mut self, key: &str, start: isize, stop: isize) -> impl std::future::Future<Output = Result<Vec<String>>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 |     async fn zrangebyscore(&mut self, key: &str, min: f64, max: f64) -> Result<Vec<String>>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 31 -     async fn zrangebyscore(&mut self, key: &str, min: f64, max: f64) -> Result<Vec<String>>;
[INFO] [stdout] 31 +     fn zrangebyscore(&mut self, key: &str, min: f64, max: f64) -> impl std::future::Future<Output = Result<Vec<String>>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     async fn keys(&mut self, pattern: &str) -> Result<Vec<String>>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 32 -     async fn keys(&mut self, pattern: &str) -> Result<Vec<String>>;
[INFO] [stdout] 32 +     fn keys(&mut self, pattern: &str) -> impl std::future::Future<Output = Result<Vec<String>>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     async fn zcard(&mut self, key: &str) -> Result<usize>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 33 -     async fn zcard(&mut self, key: &str) -> Result<usize>;
[INFO] [stdout] 33 +     fn zcard(&mut self, key: &str) -> impl std::future::Future<Output = Result<usize>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 |     async fn llen(&mut self, key: &str) -> Result<usize>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 34 -     async fn llen(&mut self, key: &str) -> Result<usize>;
[INFO] [stdout] 34 +     fn llen(&mut self, key: &str) -> impl std::future::Future<Output = Result<usize>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/persistence/redis.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 |     async fn exists(&mut self, key: &str) -> Result<bool>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 35 -     async fn exists(&mut self, key: &str) -> Result<bool>;
[INFO] [stdout] 35 +     fn exists(&mut self, key: &str) -> impl std::future::Future<Output = Result<bool>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "270feee00b3f493eae25916f537053a0716188748534b6bc76fb3a76d89637f7", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "270feee00b3f493eae25916f537053a0716188748534b6bc76fb3a76d89637f7", kill_on_drop: false }`
[INFO] [stdout] 270feee00b3f493eae25916f537053a0716188748534b6bc76fb3a76d89637f7
